【Unity2018】オブジェクトにWebCameraの映像を貼り付ける

はじめに

UnityでPlaneにウェブカメラの映像を貼り付ける方法についてです。
映像にエフェクトをつけたり3Dキャラを走らせたり夢を広げるための下準備です。

Let’s プログラミング

では、実際にプログラムを書いていきましょう。

スクリプトの作成

ウェブカメラの映像を取得して、テクスチャにセットするスクリプトを作成していきます。
ProjectウィンドウのAssetフォルダ内で右クリックしてCreate>C# Scriptを選択します。
新しく作成したC#スクリプトのファイル名をWebCamController.csにします。
作成したスクリプトに以下のプログラムを記述します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WebCamController : MonoBehaviour {
    public int width = 640;
    public int height = 480;
    public int fps = 30;
    WebCamTexture webCamTexture;

    // Use this for initialization
    void Start()
    {
        WebCamDevice[] devices = WebCamTexture.devices;
        for (var i = 0; i < devices.Length; i++)
        {
            Debug.Log(devices[i].name);
        }
        if (devices.Length > 0)
        {
            webCamTexture = new WebCamTexture(devices[0].name, this.width, this.height, this.fps);
            GetComponent<Renderer>().material.mainTexture = webCamTexture;
            webCamTexture.Play();
        }
    }

}

このプログラム内容は以下の通りです。

1. devicesにWebCamTexture.devicesで取得したカメラデバイスの配列情報を格納する。

大抵のパソコンにはカメラは一つしかないので、devices[0]に格納されます。
スマホの場合、外カメと内カメがあるので、取得したいカメラの要素数を確認してください。

2. webCamTextureに、取得したいカメラの画像データを受け渡す。

パラメータとして設定した幅、高さ、フレームレートが選択されたカメラにサポートされていない場合、最も近い使用可能な値が返される。

3. アタッチされたオブジェクトのマテリアルに設定されたmainTextureにウェブカメラのセットします。

4. ウェブカメラを再生します。

スクリプトのアタッチ

Hierarchyビュー上で右クリックして3D Object > Planeを作成します。
Planeに作成したスクリプトをD&Dすれば完成です。

映像が上下もしくは左右反転している場合
Plane>Transform>Scaleの値をマイナスにして反転させる。

映像が暗い場合
ProjectウィンドウのAssetフォルダ内で右クリックしてCreate>Materialを選択。
作成したマテリアルを選択し、Inspectorビュー>Shader>Unlit/Textureに変更。
Planeに適用する。

参考文献

こちらの記事がわかりやすいです。 nn-hokuson.hatenablog.com