UnityのWebCamTextureを触ったのでメモ.
WebCamTexture (Reference)
使用方法は簡単で,以下のようなBoo スクリプトで動作します.devices = WebCamTexture.devices でカメラのデバイスリストを取得してから,wct = WebCamTexture(devices[index].name) として使用したいCameraのWebCamTextureを作成します.wct.Play()としてから,renderer.material.mainTextureにwctを指定すれば,このスクリプトがアタッチされたGameObjectのテクスチャがWebCameraの映像になります.簡単です.
Web Playerの場合は,WebCameraを使用してよいというユーザーの許可が必要なので,yield Application.RequestUserAuthorization(UserAuthorization.WebCam)をStart()にて実行すれば,許可を求める画面が表示されます,この画面は英語ですが,日本語にする方法は残念ながら不明です.また,def Start() as IEnumerator:と返り値の型を明記していますが,これはyieldを使用するには返り値が必要だからです.これがないと正常にyieldできません.IEnumeratorはSystem.Collections.IEnumeratorなので,これをimportする必要もあります.
import UnityEngine import System.Collections class myWebCamTexture (MonoBehaviour): public gameobjects as (GameObject) private state as int # 0:no user authoraization 1:no camera available, 2:camera available private wct as WebCamTexture private devices as (WebCamDevice) private index as int = 0 private message as string def Start () as IEnumerator : ifdef UNITY_WEBPLAYER: # reguest user authorization if web player. yield Application.RequestUserAuthorization(UserAuthorization.WebCam) if Application.HasUserAuthorization(UserAuthorization.WebCam): state=1 else: message = "User authorization is required." return ifdef not UNITY_WEBPLAYER: state=1 if state==1: message = "No camera is found." devices = WebCamTexture.devices if devices.Length > 0 : # look for front facing camera for h as int,i as WebCamDevice in enumerate(devices): if i.isFrontFacing: index = h break # set camera and play wct = WebCamTexture(devices[index].name) wct.Play() # set webcamtexture to all gameobjects" material for i in gameobjects: i.renderer.material.mainTexture = wct # state=2 message = [x.name for x in devices].Join("\n") def Update (): pass def OnGUI (): # change camera button if state==2: if devices.Length>=2: if GUI.Button(Rect(0, 0, Screen.width/4, Screen.height/8), "Change Camera"): index++ if index==devices.Length: index=0 wct.Stop() wct.deviceName = devices[index].name wct.Play() # message text area else : GUI.TextArea(Rect(0, 0, Screen.width/4, Screen.height/8),message , 200)
いくつかポイントがあります.
カメラを変更する場合は,以下のように,WebCamTextureを一度Stop()してから,deviceNameを指定し,再度Play()する必要があるみたいです.
wct.Stop() wct.deviceName = WebCamTexture.devices[index].name wct.Play()
また,前面カメラかどうかを取得するには,WebCamDevice.isFrontFacing を使えばよいです.このサンプルでは,前面カメラを優先的に最初に表示するように,以下のようにしています.
# look for front facing camera for h as int,i as WebCamDevice in enumerate(devices): if i.isFrontFacing: index = h break
このスクリプトを使った,BlenderのMonkeyにカメラで取った顔を表示するサンプルを作ってみました.
こちら\
(2013.11.20 published)