ウェブカメラの映像をテクスチャとして貼り付ける
ウェブカメラの動画を取得するには、WebCamTextureクラスを使う。
次は、ウェブカメラからの映像をメインテクスチャとして適用するスクリプト。このスクリプトを、たとえば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指定)
表示用Planeの設定
WebCamTextureを張り付けるPlaneのアスペクト比は、ウェブカメラのアスペクト比と同じにしておく。
また、表示以外の不要な機能を切っておく。具体的には、次がある。
- MeshCollider
- MeshRenderer
- CastShadows
- ReceiveShadows
- MotionVectors
- LightProbes
- ReflectionProbes
複数のウェブカメラを使う
複数のウェブカメラが接続されている場合は、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指定)
ただし、Unityでは同じ種類のウェブカメラは1つしか使えない。たとえ片方のウェブカメラのドライバを強制的に変えて、見かけ上は異なるウェブカメラにしても、だめ。これは、ウェブカメラデバイスが、USBデバイスのレベルで管理されているためと思われる。
同じウェブカメラを複数使うためには、特別な対応が必要になる。これについては別途あらためて書きたい。