📜  打开场景统一 - C# (1)

📅  最后修改于: 2023-12-03 15:25:47.254000             🧑  作者: Mango

打开场景统一 - C#

在开发游戏时,场景是游戏中不可或缺的一部分。Unity3D作为一个主流的游戏引擎,场景的加载和切换也是必不可少的。但是,如果在代码中直接使用场景名称进行加载和切换,容易造成代码的混乱和重复,不利于项目的维护和扩展。因此,统一管理场景的加载和切换是一个很好的编程习惯。

场景管理器

场景管理器的作用是统一管理场景的加载和切换。我们可以通过创建一个单例的场景管理器来实现该功能。

using UnityEngine.SceneManagement;

public class SceneMgr
{
    private static SceneMgr instance = null;

    public static SceneMgr Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new SceneMgr();
            }
            return instance;
        }
    }

    private SceneMgr() { }

    public void LoadScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }

    public void LoadSceneAsync(string sceneName)
    {
        SceneManager.LoadSceneAsync(sceneName);
    }

    public void LoadSceneAdditive(string sceneName)
    {
        SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);
    }

    public void LoadSceneAdditiveAsync(string sceneName)
    {
        SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
    }

    public void UnloadScene(string sceneName)
    {
        SceneManager.UnloadSceneAsync(sceneName);
    }
}

以上就是一个简单的场景管理器的代码实现。该类中包含了场景加载、异步场景加载、添加场景、异步添加场景和卸载场景等方法。

场景名称枚举

在上述场景管理器的实现中,场景的名称仍然需要通过字符串传递,容易出现拼写错误、重复等问题。因此,我们可以使用枚举来代替字符串,提高代码的可读性和可维护性。

public enum SceneName
{
    StartScene,
    MainScene,
    ...
}

使用场景名称枚举的优势在于:

  • 缩减了代码量
  • 可以避免传递错误的场景名称
  • 可以方便地添加或修改场景名称
场景切换

在游戏的过程中,场景切换是一种常用的操作。我们可以通过场景管理器实现场景的切换。

public void GoToStartScene()
{
    SceneMgr.Instance.LoadScene(SceneName.StartScene.ToString());
}

public void GoToMainScene()
{
    SceneMgr.Instance.LoadScene(SceneName.MainScene.ToString());
}

同样,我们可以使用枚举类型来代替字符串类型,使得代码更加简洁、清晰。

public void GoToStartScene()
{
    SceneMgr.Instance.LoadScene(SceneName.StartScene);
}

public void GoToMainScene()
{
    SceneMgr.Instance.LoadScene(SceneName.MainScene);
}
总结

综上所述,打开场景统一的编程习惯可以提升代码的可维护性,降低代码的耦合性。在实际开发中,我们可以使用场景管理器、场景名称枚举和场景切换等方式实现场景的统一管理。