Могу ли я сделать снимок в Unity с помощью камеры устройства?

Я совершенно не знаком с более сложным набором функций Unity3D и мне любопытно, есть ли у него возможность сделать снимок, а затем манипулировать им. В частности, мое желание состоит в том, чтобы пользователь сделал селфи, а затем проследил за их лицом, чтобы создать PNG, который затем будет отображаться на модели.

Я знаю, что отображение лица на модель просто, но мне интересно, нужно ли мне писать функциональность фото / резьбы в охватывающее приложение Chrome, или если все это можно сделать изнутри единства. Мне не нужен учебник о том, как это сделать, просто спросите, возможно ли это.

6 ответов


Да, это возможно. Вы захотите посмотреть на WebCamTexture функциональность.

вы создаете WebCamTexture и вызываете его Play () функция, которая запускает камеру. WebCamTexture, как и любая текстура, позволяет получать пиксели с помощью вызова GetPixels (). Это позволяет сделать снимок, когда вам нравится, и вы можете сохранить его в Texture2D. Звонок в EncodeToPNG () и последующая запись в файл должна привести вас туда.

обратите внимание, что приведенный ниже код является быстрой записью на основе документации. Я не проверял его. Возможно, вам придется выбрать правильное устройство, если доступно несколько устройств.

using UnityEngine;
using System.Collections;
using System.IO;

public class WebCamPhotoCamera : MonoBehaviour 
{
    WebCamTexture webCamTexture;

    void Start() 
    {
        webCamTexture = new WebCamTexture();
        renderer.material.mainTexture = webCamTexture;
        webCamTexture.Play();
    }

    void TakePhoto()
    {

    // NOTE - you almost certainly have to do this here:

     yield return new WaitForEndOfFrame(); 

    // it's a rare case where the Unity doco is pretty clear,
    // http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
    // be sure to scroll down to the SECOND long example on that doco page 

        Texture2D photo = new Texture2D(webCamTexture.width, webCamTexture.height);
        photo.SetPixels(webCamTexture.GetPixels());
        photo.Apply();

        //Encode to a PNG
        byte[] bytes = photo.EncodeToPNG();
        //Write out the PNG. Of course you have to substitute your_path for something sensible
        File.WriteAllBytes(your_path + "photo.png", bytes);
    }
}

для тех, кто пытается получить камеру для рендеринга live feed, вот как мне удалось его снять. Во-первых, я отредактировал ответ Барта, чтобы текстура была назначена при обновлении, а не только при запуске:

void Start()
{
    webCamTexture = new WebCamTexture();
    webCamTexture.Play();
}

void Update()
{
    GetComponent<RawImage>().texture = webCamTexture;
}

затем я прикрепил скрипт к GameObject с компонентом RawImage. Вы можете легко создать его Правой Кнопкой Мыши - > UI - > RawImage в иерархии в редакторе Unity (для этого требуется Unity 4.6 и выше). Запуск его должен показывать прямую трансляцию камеры в вашем представлении. Как из этого письма Unity 5 поддерживает использование веб-камер в бесплатной личной версии Unity 5.

Я надеюсь,что это поможет любому, кто ищет хороший способ захвата живой камеры в Unity.


Это возможно. Я настоятельно рекомендую вам посмотреть WebcamTexture единства с API. Он имеет некоторые полезные функции:

  1. метода getpixel() -- возвращает цвет пикселя в координатах (x, y).
  2. GetPixels() -- получите блок цветов пикселей.
  3. GetPixels32 () -- возвращает данные пикселей в формате RAW.
  4. MarkNonReadable () -- отмечает WebCamTexture как нечитаемый
  5. Pause() -- приостанавливает камеры.
  6. Play () -- запускает камеру.
  7. Stop () -- останавливает камеру.

ответ Барта имеет требуемую модификацию. Я использовал его код, и фотография, которую я получал, была черной. Требуемая модификация заключается в том, что мы должны преобразуйте TakePhoto в coroutine и добавьте

yield return new WaitForEndOfFrame(); 

в начале корутина. (Courtsey @fafase) Подробнее см. http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html

вы также можете обратиться к

возьмите фотографии с помощью веб-камеры дает черный выход[в Unity3D]


для этого типа функций доступен плагин под названием Camera Capture Kit -https://www.assetstore.unity3d.com/en/#!/содержание / 56673 и в то время как функциональность направлена на мобильный он содержит демонстрацию того, как вы можете использовать WebCamTexture, чтобы сделать неподвижное изображение.


Да, вы можете. Я создал Android родная камера плагин, который может открыть камеру вашего Android устройства, захватить изображение, записать видео и сохранить его в нужном месте вашего устройства с помощью всего нескольких строк кода.