Unityでスマホのカメラを使って動画を全画面表示させる方法のメモ。
この辺を調べてるとスマホのカメラとUnityのカメラが紛らわしかった。
ARとか写真加工撮影とかで使えそう。
手順
まず Unity のカメラを平行投影(orthographic)に変更する。
次にそのカメラ方向に垂直になるように Quad を配置する。
Quad に WebCam.cs を追加する。
スクリプトの maincamera に Unity のカメラをアタッチする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
using UnityEngine; using System; using System.Collections; using UnityEngine.UI; public class WebCam : MonoBehaviour { public Camera maincamera; WebCamTexture webcamTexture; const int FPS = 60; void Start(){ //Quadを画面いっぱいに広げる float _h = maincamera.orthographicSize * 2; float _w = _h * maincamera.aspect; //スマホ(Unity)が横ならそのまま if(Input.deviceOrientation == DeviceOrientation.LandscapeLeft){ transform.localScale = new Vector3 (_w, _h, 1); } //縦なら回転させる if(Input.deviceOrientation == DeviceOrientation.FaceUp){ transform.localScale = new Vector3 (_h, _w, 1); transform.localRotation *= Quaternion.Euler(0,0,-90); } //カメラのテクスチャをQuadに載せる Renderer rend = GetComponent<Renderer>(); if(WebCamTexture.devices.Length > 0){ WebCamDevice cam = WebCamTexture.devices[0]; WebCamTexture wcam = new WebCamTexture (cam.name); wcam.Play (); int width = wcam.width, height = wcam.height; if(width<1280||height<720){width*=2;height*=2;} webcamTexture = new WebCamTexture (cam.name, width, height, FPS); wcam.Stop (); rend.material.mainTexture = webcamTexture; webcamTexture.Play(); } } } |
これで全画面にカメラの映像が表示される。
カメラはデフォルトで横方向なのでスマホが縦のときは回転するような処理が入っている。
これがないと縦横比が変な感じに。
またカメラが2つ以上あるときには WebCamTexture.devices[1] とかに変えれば変更できる。