它是
UnityEngine.SceneManagement.SceneManager.LoadScene("Gameplay")
是的,它确实可以“立即”执行 - 也就是说同步执行。
换句话说,在那行代码处“停止”,等待直到加载整个场景(即使这需要几秒钟),然后新场景开始。
不要使用你在问题中提到的旧命令。
请注意,Unity还具有异步加载的能力。它会在后台“缓慢地加载新场景”。
但是:我建议您只使用普通的“LoadScene”。最重要的是可靠性和简单性。用户根本不介意电脑花几秒钟时间来加载关卡时机器“停止”的情况。
(每次我在电视上点击“Netflix”,都需要一些时间让电视完成操作。没有人关心 - 这很正常。)
但是,如果您确实想要在后台加载,请按照以下方式进行...
public void LaunchGameRunWith(string levelCode, int stars, int diamonds)
{
.. analytics
StartCoroutine(_game( levelCode, superBombs, hearts));
}
private IEnumerator _game(string levelFileName, int stars, int diamonds)
{
yield return new WaitForSeconds(1.5f);
AsyncOperation ao;
ao = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("Gameplay");
while (!ao.isDone)
{
Debug.Log("loading " +ao.progress.ToString("n2"));
yield return null;
}
NewLap newLap = Object.FindObjectOfType< NewLap >();
Gameplay gameplay = Object.FindObjectOfType<Gameplay>();
newLap.StarLevel = stars;
newLap.DiamondTime = diamonds;
newLap.ActuallyBeginRunWithLevel(levelFileName);
}
注意:该脚本回答了当玩家在“主菜单”上点击播放后,如何将信息传递“到实际的游戏场景”的问题。
LoadScene
实际上是同步的,而不是异步的。如果要异步加载场景,请使用LoadSceneAsync
。 - AquaGeneralLoadScene
是即时的,为什么我的其他Monobehaviour的Awake仍然会被调用?(我确实改变了脚本顺序,使它成为在其他Awake之前发生的第一件事)(注意:这并不值得一个“问题”,它对我来说不是一个问题。我只是觉得这很奇怪,与您的信息不符) - jeromej