はこねのはこ

はこねさんの備忘録

Unity マルチシーンで別シーンにあるカメラをCanvasのRenderCameraに設定したい

はじめに

Sorting Layersの設定により、Canvasよりもパーティクルを画面前に出したかった。
そのためにCanvasのRenderModeをScreenSpace-CameraにしてRenderCameraにMainCameraを設定したかったが、
マルチシーン環境で、別シーンにあるMainCameraをInspector上で設定することはできないようだ。

やったこと

いろいろやり方はあるようだが、シーンが読み込まれた際に他のシーンのカメラを自動でアタッチするやり方をとった。

下記のスクリプトをMainCameraがないシーンのCanvasにアタッチした。

using UnityEngine;

namespace GameLogics
{
    public class DynamicCameraAssign : MonoBehaviour
    {
        private Canvas _canvas;

        private void Start()
        {
            _canvas = GetComponent<Canvas>();

            if (_canvas != null)
            {
                AssignCamera();
            }
        }

        private void AssignCamera()
        {
            Camera targetCamera = FindCamera();

            if (targetCamera != null)
            {
                Debug.Log("ScreenSpaceCameraに設定しました。");
                _canvas.renderMode = RenderMode.ScreenSpaceCamera;
                _canvas.worldCamera = targetCamera;
            }
        }

        private Camera FindCamera()
        {
            // 他のシーンにあるカメラを検索
            return FindObjectOfType<Camera>();
        }
    }
}