gpt4 book ai didi

c# - Unity中的LoadScene()函数什么时候改变场景?

转载 作者:太空狗 更新时间:2023-10-29 21:12:12 26 4
gpt4 key购买 nike

当您调用函数 LoadScene() 时它会立即切换场景,还是只是发出需要更改场景的信号? LoadScene() 的文档没有说明。

我正在使用的具体示例如下所示:

LoadScene(levelName);
ItemBox newBox = (ItemBox)Instantiate(...);

那么对于上面的代码,newBox 是存在于我们刚刚加载的场景中,还是在旧场景中创建,然后在加载新关卡时销毁。

最佳答案

 UnityEngine.SceneManagement.SceneManager.LoadScene("Gameplay");

是的,它“立即”执行 - 也就是说 s同步。

换句话说,它“停止”在该行代码处,等待加载整个场景(即使这需要几秒钟),然后新场景开始。

不要使用您在问题中提到的旧命令。

请注意,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)
{
// first, add some fake delay so it looks impressive on
// ordinary modern machines made after 1960
yield return new WaitForSeconds(1.5f);

AsyncOperation ao;
ao = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("Gameplay");

// here's exactly how you wait for it to load:
while (!ao.isDone)
{
Debug.Log("loading " +ao.progress.ToString("n2"));
yield return null;
}

// here's a confusing issue. in the new scene you have to have
// some sort of script that controls things, perhaps "NewLap"
NewLap newLap = Object.FindObjectOfType< NewLap >();
Gameplay gameplay = Object.FindObjectOfType<Gameplay>();

// this is precisely how you conceptually pass info from
// say your "main menu scene" to "actual gameplay"...
newLap.StarLevel = stars;
newLap.DiamondTime = diamonds;

newLap.ActuallyBeginRunWithLevel(levelFileName);
}

注意:该脚本回答了当玩家点击“进入实际游戏场景”时“从主菜单”传递信息的问题。

关于c# - Unity中的LoadScene()函数什么时候改变场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com