所以目前我需要从另一个场景打开不同的级别(它们在同一个场景中)。当用户从菜单打开第一级时,我想为第一级启用 sript 并为其他人禁用脚本。但它并没有真正奏效。那么有没有办法从另一个场景启用/禁用脚本?或者可能将每个级别放在不同的场景中更有意义?(我不确定硬币计数等某些系统是否可以正常工作。)感谢您的回答。
我建议你把每个关卡放在不同的场景中,然后异步加载它们
SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
然后卸载然后上一个,当你不再需要它时。
您可以禁用另一个场景的脚本,您需要参考它们或先找到它们,然后禁用脚本。
要加载场景,您可以使用 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();
}
}