【Unity】コピペでOK!複数の鏡を作っても処理負荷が重くならない方法。動的に生成させます。

どうも、だらはです。

以前、以下の記事にて鏡の作り方を紹介しました。

しかし、この方法では鏡を複数生成すると処理負荷が重くなってしまいます。

(私の作成しているプロジェクトでは鏡を80個以上使うため、この方法で実装したら、CoreI9のパソコンでもカクカク動作になってしまいました)

コピペOKのスクリプトを書いたので、是非参考にして頂けたらと思います。

スポンサーリンク

鏡オブジェクトにスクリプトを適用する

早速、複数の鏡を実装する手順をまとめます。

◆手順

  1. 鏡オブジェクトの材質を金属に寄せるため、「Material」(Reflection)を作成。(図1)
  2. 鏡オブジェクト(Cube)に対し、以下の通り設定する。(図2)
    ・鏡の描画を反転するため、「Transform」の「Scale.x」にマイナス値を設定。
    ・1. で作成した「Material」を、「Mesh Renderer」の「Materials」に設定。
    ・カメラ描画領域設定のため、「Box Collider」の「Is Trigger」と「Size」を設定。
    ・「MirrorObj.cs」スクリプトを設定。

以上です。

◆「MirrorObj.cs」スクリプト

using UnityEngine;

public class MirrorObj : MonoBehaviour
{
private RenderTexture m_renderTexture = null;
private Material m_material = null;
private Camera camera;

void Start()
{
m_renderTexture = new RenderTexture(512, 512, 0, RenderTextureFormat.ARGB32);

Renderer render = GetComponentInChildren<Renderer>();
if (render != null)
{
m_material = new Material(render.material);
m_material.mainTexture = m_renderTexture;
render.material = m_material;
}

camera = GetComponentInChildren<Camera>();
if (camera != null)
{
camera.enabled = false;
camera.targetTexture = m_renderTexture;
}
}

private bool near;

void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.name == “unitychan")
{
camera.enabled = true;
near = true;
}
}
void OnTriggerExit(Collider collider)
{
camera.enabled = false;
near = false;
}

void OnDestroy()
{
if (m_renderTexture != null)
{
Destroy(m_renderTexture);
}
if (m_material != null)
{
Destroy(m_material);
}
}

}

◆図1

◆図2

スポンサーリンク

応用

Posted by daraha_gm