【发布时间】:2020-10-22 01:06:20
【问题描述】:
我有一个“持久场景”,它始终在后台通过 GameManager 脚本处理加载和卸载。激活此脚本的方法是输入触发器并按“E”,这将加载另一个场景。
加载到森林中的示例
触发器上的脚本:
public class ForestEnter : MonoBehaviour
{
void OnTriggerStay2D(Collider2D other)
{
if (Input.GetKey(KeyCode.E))
{
GameManager.instance.LoadForest();
}
}
}
GameManger 中的部分脚本:
public void LoadForest()
{
scenesLoading.Add(SceneManager.UnloadSceneAsync((int)SceneIndexes.CITY));
scenesLoading.Add(SceneManager.LoadSceneAsync((int)SceneIndexes.FOREST, LoadSceneMode.Additive));
spawnname = ("CityExit");
sceneName = ("Forest");
StartCoroutine(GetSceneLoadProgress());
}
以及它正在调用的协程(确保它等到所有内容都加载完毕后再找到生成点并将场景设置为“活动场景”)
public IEnumerator GetSceneLoadProgress()
{
for(int i=0; i<scenesLoading.Count; i++)
{
while (!scenesLoading[i].isDone)
{
yield return null;
}
}
player = GameObject.Find("PC");
playerPOS = player.transform;
spawn = GameObject.Find(spawnname);
spawnPOS = spawn.transform;
playerPOS.position = spawnPOS.position;
SceneManager.SetActiveScene(SceneManager.GetSceneByName(sceneName));
}
现在我的问题是有时它会加载两次场景,因为总共会播放 3 个场景,GameManager 场景、森林场景和森林场景。但它只是偶尔发生,不是每次都发生。
我认为问题在于,如果我按住“E”太久,它会在卸载之前尽可能多地调用脚本,但我不知道如何停止它.
任何帮助或建议将不胜感激!
【问题讨论】: