読者です 読者をやめる 読者になる 読者になる

Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

ウェブカメラの映像を表示する

ウェブカメラの映像をテクスチャとして貼り付ける

ウェブカメラの動画を取得するには、WebCamTextureクラスを使う。

docs.unity3d.com

次は、ウェブカメラからの映像をメインテクスチャとして適用するスクリプト。このスクリプトを、たとえばPlaneオブジェクトにアタッチすれば、Plane上にウェブカメラの映像が表示される。

using UnityEngine;
using System.Collections;

public class WebcamCapture : MonoBehaviour {

    //このクラスをウェブカメラの映像をテクスチャとして貼り付けるオブジェクトに適用する

    private WebCamTexture webcamtex;

    // Use this for initialization
    void Start()
    {

        webcamtex = new WebCamTexture();   //コンストラクタ
        
        Renderer _renderer = GetComponent<Renderer>();  //Planeオブジェクトのレンダラ
        _renderer.material.mainTexture = webcamtex;    //mainTextureにWebCamTextureを指定
        webcamtex.Play();  //ウェブカムを作動させる
    }

}

width, height, FPSを明示的に指定する場合は、コンストラクタに引数として与えることもできる

        webcamtex = new WebCamTexture(1280, 800, 30);   //コンストラクタ (width, height, FPS指定)

f:id:yasuda0404:20170418094250p:plain

表示用Planeの設定

WebCamTextureを張り付けるPlaneのアスペクト比は、ウェブカメラのアスペクト比と同じにしておく。

また、表示以外の不要な機能を切っておく。具体的には、次がある。

  • MeshCollider
  • MeshRenderer
    • CastShadows
    • ReceiveShadows
    • MotionVectors
    • LightProbes
    • ReflectionProbes

f:id:yasuda0404:20170418095641p:plain

複数のウェブカメラを使う

複数のウェブカメラが接続されている場合は、WebCamTextureのコンストラクタで、デバイス名を明示的に指定する。

現在、接続されているウェブカメラ・デバイスは、WebCamTexture.devicesで取得でき、デバイス名は、WebCamDevice.nameプロパティで取得する。

    WebCamDevice[] devices = WebCamTexture.devices; //接続されているウェブカメラを取得
        foreach (WebCamDevice device in devices)
        {
            Debug.Log("WebCamDevice " + device.name);
        }
            
        //
        webcamtexA = new WebCamTexture(devices[0].name);   //コンストラクタ (デバイス指定)
        webcamtexB = new WebCamTexture(devices[1].name, 1280, 800, 30);   //コンストラクタ (デバイス, width, height, FPS指定)