如何从另一个场景打开不同的关卡?(unity 2d)

问题描述 投票:0回答:2

所以目前我需要从另一个场景打开不同的级别(它们在同一个场景中)。当用户从菜单打开第一级时,我想为第一级启用 sript 并为其他人禁用脚本。但它并没有真正奏效。那么有没有办法从另一个场景启用/禁用脚本?或者可能将每个级别放在不同的场景中更有意义?(我不确定硬币计数等某些系统是否可以正常工作。)感谢您的回答。

unity3d
2个回答
0
投票

我建议你把每个关卡放在不同的场景中,然后异步加载它们

SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); 

然后卸载然后上一个,当你不再需要它时。

您可以禁用另一个场景的脚本,您需要参考它们或先找到它们,然后禁用脚本。


0
投票

要加载场景,您可以使用 Unity 的 SceneManager 类来 通过场景名称或场景索引加载场景

如果您有任何在所有场景中通用的系统,例如上面提到的硬币计数系统,您可以创建一个单例脚本。

A

singleton
是一种设计模式,用于创建在游戏的整个生命周期中具有单个实例的类。这种模式通常用于游戏管理器、音频管理器和其他在游戏中应该只有一个实例的类。

这里是单例脚本的简单示例:

public class MySingleton : MonoBehaviour
{
    public static MySingleton Instance { get; private set; }

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }

    // Other methods and properties...

    public void ExampleMethod()
    {
        //This is an example method
    }
}

在本例中,

MySingleton
是一个 MonoBehaviour 组件,可以附加到场景中的游戏对象。
Instance
属性是对组件的单例实例的静态引用。

Awake()
方法中,代码检查组件的实例是否已经存在。如果是,它会销毁新实例,以便只有一个实例在场景中处于活动状态。否则,它会将
Instance
属性设置为当前实例,并使用
DontDestroyOnLoad()
确保游戏对象在场景变化时保持不变。

要从另一个脚本访问

MySingleton
的单例实例,您可以简单地调用
MySingleton.Instance
。例如:

public class MyOtherScript : MonoBehaviour
{
    private void Start()
    {
        MySingleton.Instance.ExampleMethod();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.