【问题标题】:Unity scene switching takes too much timeunity 场景切换太费时间
【发布时间】:2018-06-30 02:08:59
【问题描述】:

我在一个场景中创建了一个带有主菜单的游戏,我还有一个包含实际游戏的第二个场景。当用户点击主菜单场景上的播放按钮时,它会加载实际的游戏场景,但问题是它需要太多时间。我该怎么办?

这是我正在使用的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MainMenu : MonoBehaviour {

    public void PlayGame()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);

    }
    public void QuitGame()
    {
        Debug.Log("Ho gaya....! Mera Ho gya");
        Application.Quit();
    }
}

【问题讨论】:

  • 因为您并没有真正了解场景包含的内容。也不是 to much time 实际占的(1 秒、1 分钟、1 小时),很难给出正确的答案。
  • 如果你的场景有很多网格纹理等,这将不可避免地需要很长时间来加载,所以我建议你创建一个加载栏并异步加载:)
  • 正如其他用户已经指出的那样,您需要提供更多信息。您可以先在游戏场景类中添加代码。

标签: c# unity3d scene-manager


【解决方案1】:

您可以使用 LoadSceneAsync 提前加载关卡,但不能激活它,加载完成时会收到回调,而当用户按下按钮时,您可以简单地激活场景,这应该是即时的

【讨论】:

    【解决方案2】:

    除了上述之外,您也可以等到按下所述按钮后呼叫SceneManager.LoadSceneAsync,但在实际游戏场景加载时显示一个幕布(也称为加载屏幕)。协程是你的朋友,因为你可以等待 AsyncOperation 从协程 IE 中通过 yield returning 完成

    var curtain = Instantiate(CurtainPrefab);
    DontDestoryOnLoad(curtain);
    yield return SceneManager.LoadSceneAsync(gameSceneIndex);
    
    // Don't allow unload to clean up this object or it'll stop the coroutine before destroying the curtain!
    DontDestroyOnLoad(gameObject);
    yield return SceneManager.UnloadSceneAsync(mainMenuSceneIndex);
    Destroy(curtain);
    
    // Do this last or the Coroutine will stop short
    Destroy(gameObject);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 2020-03-23
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多