我有一个开始的场景,有一个开始按钮。开始场景有一个摄像机适配器游戏对象。摄像机适配器获取主摄像机,并在每个场景上执行一些操作。当我点击开始并加载下一个场景时,相机适配器对象在下一个场景中可用,但是相机丢失了。下面是我的代码和配置:




我在我的CameraAdapter脚本中添加了以下代码:
public class CameraAdaptor2D : MonoBehaviour{
float displayWidth;
float displayHeight;
[SerializeField] Camera cam;
void OnEnable()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
cam = Camera.main;
}
// called when the game is terminated
void OnDisable()
{
Debug.Log("OnDisable");
SceneManager.sceneLoaded -= OnSceneLoaded;
}
private void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
// Start is called before the first frame update
void Start()
{
cam = Camera.main;
displayWidth = Screen.width;
displayHeight = Screen.height;positionCamera();}
void PositionCamera()
{
Vector3 vector = new Vector3(0.0f,0.0f,0.0f);
cam.transform.position = vector;
}当我点击“开始”按钮时,团结就会加载到下一个级别。但是有了上面的代码,我无法获得当前场景的摄像机。即使我添加了一个断点,下一个场景也不会停在断点上。在代码中是否有我遗漏的东西,或者是否有其他方法可以在每个场景中获得摄像头?
发布于 2021-05-21 16:48:24
当使用DontDestroyOnLoad时,当加载到一个新场景时,所有特定于场景的引用都会被删除。您需要订阅sceneLoaded并在那里指定引用。
void OnEnable()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
// assign the reference here
}
void OnDisable()
{
// make sure to unsubscribe or you will get multiple calls after multiple scene loads
SceneManager.sceneLoaded -= OnSceneLoaded;
}另一个选项是将脚本所在的对象放在每个场景中并分配引用,然后在Awake中查找场景中脚本的另一个实例,然后将旧的对象引用分配给当前并销毁当前。
void Awake()
{
CameraAdaptor2D obj = Object.FindObjectOfType<CameraAdaptor2D>();
if (obj != null)
{
// assign the other object here
obj.AssignCamera(cam);
Destroy(this.gameObject);
return;
}
DontDestroyOnLoad(this.gameObject);
}
public void AssignCamera(Camera c)
{
cam = c;
}我还应该提到,这两个答案都使用DontDestroyOnLoad。第一个要求在您加载的第一个场景中存在一个实例,您将永远不会在同一个会话中再次加载这个场景。第二个要求在每个场景中都有相同的对象,这样引用就可以由场景中对象的本地实例来设置。如果您需要更多关于这两种实现如何工作的详细信息,请告诉我。
发布于 2021-05-21 17:51:47
因为您只继承CameraAdaptor2D,而不是Camera本身。
void Start()
{
cam = Camera.main;
displayWidth = Screen.width;
displayHeight = Screen.height;
DontDestroyOnLoad (cam);
}但是,当然,要确保在其他场景中没有其他Camera。
https://stackoverflow.com/questions/67640819
复制相似问题