Показать прямую трансляцию камеры в Unity

У меня есть вопрос относительно единства. Надеюсь, на этот вопрос не ответили раньше. Я хочу подключить камеру (например, HD-камеру) к компьютеру, и видеопоток должен отображаться внутри моей сцены Unity. Подумайте об этом как о виртуальном телевизионном экране, который отображает то, что камера видит в реальном времени. Как я могу это сделать? Google не указал мне в правильном направлении, но, возможно, я просто не могу получить правильный запрос;)

надеюсь, вы понимаете, к чему я клоню.

2 ответов


Да, это, безусловно, возможно, и к счастью для вас Unity3D на самом деле поддерживает его довольно хорошо из коробки. Вы можете использовать WebCamTexture чтобы найти веб-камеру и отобразить ее в текстуру. Оттуда вы можете выбрать, чтобы отобразить текстуру на что-нибудь в 3D-сцене, включая виртуальный экран телевизора, конечно.

это выглядит довольно понятным, но приведенный ниже код должен начать вас.

список и распечатайте подключенные устройства обнаруживает:

var devices : WebCamDevice[] = WebCamTexture.devices;
for( var i = 0 ; i < devices.length ; i++ )
    Debug.Log(devices[i].name);

подключитесь к подключенной веб-камере и отправьте данные изображения в текстуру:

WebCamTexture webcam = WebCamTexture("NameOfDevice");
renderer.material.mainTexture = webcam;
webcam.Play();

в случае, если это поможет, я публикую ответ, основанный на принятом ответе выше, написанном как скрипт C# (принятый ответ был в JavaScript). Просто прикрепите этот скрипт к GameObject, который имеет прикрепленный рендерер, и он должен работать.

public class DisplayWebCam : MonoBehaviour
{
    void Start ()
    {
        WebCamDevice[] devices = WebCamTexture.devices;

        // for debugging purposes, prints available devices to the console
        for(int i = 0; i < devices.Length; i++)
        {
            print("Webcam available: " + devices[i].name);
        }

        Renderer rend = this.GetComponentInChildren<Renderer>();

        // assuming the first available WebCam is desired
        WebCamTexture tex = new WebCamTexture(devices[0].name);
        rend.material.mainTexture = tex;
        tex.Play();
    }
}