カメラの映像をレンダーテクスチャに映す方法

投稿者: | 2020-01-27


シーン上のカメラの映像をレンダーテクスチャを使って、オブジェクトに映してみました。

まずフォルダ内で右クリックからレンダーテクスチャを新規作成します。

映像を撮るカメラのCameraコンポーネントのTarget Textureにこのレンダーテクスチャをドラッグアンドドロップします。

新しいマテリアルを作って、Albedoの横の四角形にレンダーテクスチャをドラッグアンドドロップします。

このマテリアルをシーン画面やヒエラルキーウィンドウの、映像を映したいオブジェクトにドラッグアンドドロップします。

これで、カメラの映像がレンダーテクスチャを通してオブジェクトの表面に映し出されます。

カメラの位置・方向を楽に変更する

動かしたいカメラをヒエラルキー上で選択します。

シーン上で右クリックを押しながらW,A,S,Dで視点を移動し、映したいものが丁度良く画面に収まるところへ移動します。
そこで、Ctrl + Shift + Fを押すか、GameObject -> Align With Viewをクリックします。

すると、選択されているオブジェクトが、シーン画面の視点と同じ位置に移動し、同じ方向を向きます。

逆に、選択したオブジェクトにシーン画面の視点を合わせるには、オブジェクトを選択して GameObject -> Align View to Selected をクリックします。

出現する玉の色をランダムで変える

ボールを出現させたいところに、空のゲームオブジェクトを置きます。

このゲームオブジェクトにスクリプトを付けます。

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

public class GameScript4 : MonoBehaviour
{
    public GameObject sphere;
    public float power = 1f;
    public float interval = 0.3f;

    bool generateSphere = false;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            if (generateSphere)
            {
                generateSphere = false;
                StopCoroutine("GenerateSphere");

            }
            else {
                generateSphere = true;
                StartCoroutine("GenerateSphere", interval);
            }
            
        }
    }

    IEnumerator GenerateSphere()
    {
        while(true)
        {
            // Sphereを生成する
            var s = Instantiate(sphere, transform.position + new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)), transform.rotation);
            s.GetComponent<Rigidbody>().AddForce(transform.up * power, ForceMode.Impulse); // 上方向の力を与える

            // ランダムでSphereの色を変える
            s.GetComponent<MeshRenderer>().material.color = new Color(Random.Range(0f,1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f); 

            yield return new WaitForSeconds(interval);
        }       
    }
}

コルーチンの中の繰り返し処理でSphereを生成し続けます。Eキーでコルーチンのオンオフをします。

Sphereのインスタンスを生成して、上方向の力を加えた後に、SphereについたMeshRendererコンポーネントを取得して、colorメンバに色を代入するとSphereの色を変えられます。
色はnew Color()に、0.0~1.0のRGBAの値を入れると得られます。この値を、Random.Range()を使ってランダムの値にしています。

s.GetComponent<MeshRenderer>().material.color = new Color(Random.Range(0f,1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f); 

Sphereを新規作成して、コライダーとRigidbodyを付けておきます。

SphereをProjectの適当なフォルダにドラッグアンドドロップして、プレハブ化します。

最後に、Sphereのプレハブを上のスクリプトにアタッチします。

コメントを残す

メールアドレスが公開されることはありません。