问题
制作一个Canvas预制体,Canvas的RenderMode为Screen Space Camera
实例化后Canvas的RenderMode为Screen Space Overlay
测试
制作Canvas预制体
测试脚本
using UnityEngine;
public class TestCanvas : MonoBehaviour
{
[SerializeField] Camera uiCamera;
[SerializeField] Canvas canvas;
Canvas objCanvas;
void Start()
{
Debug.Log("预制体:" + canvas.renderMode);
objCanvas = GameObject.Instantiate(canvas);
Debug.Log("实例化:" + objCanvas.renderMode);
if (uiCamera != null)
{
objCanvas.worldCamera = uiCamera;
Debug.Log("实例化设置相机:" + objCanvas.renderMode);
}
}
private void OnGUI()
{
if (canvas)
GUILayout.Label("预制体:" + canvas.renderMode.ToString());
if (objCanvas)
GUILayout.Label("实例化:" + objCanvas.renderMode.ToString());
}
}
测试1
编辑:设置预制体RenderMode为Screen Space Camera
运行:直接实例化,不设置相机
预制体rendermode为Screen Space Overlay
实例化rendermode为Screen Space Overlay
测试2
编辑:设置预制体RenderMode为Screen Space Camera
运行:实例化后设置worldcamera
预制体rendermode为Screen Space Overlay
实例化rendermode为Screen Space Overlay
设置相机后rendermode为Screen Space Camera
测试3
编辑:设置预制体RenderMode为Screen Space overlay
运行:直接实例化,不设置相机
预制体rendermode为Screen Space Overlay
实例化rendermode为Screen Space Overlay
测试4
编辑:设置预制体RenderMode为Screen Space overlay
运行:实例化后设置worldcamera
预制体rendermode为Screen Space Overlay
实例化rendermode为Screen Space Overlay
结论
实例化canvas预制体,如果预制体rendermode为Screen Space Camera,实例化获取的rendermode值为overlay,
如需恢复,需要设置worldcamera