首页 > 解决方案 > 如何在没有单例的情况下在 Unity3d 中创建游戏范围的对象?

问题描述

Unity3d 框架中是否有一种方法可以注册一个对象,该对象可以被游戏中所有场景中的所有实体访问,而无需诉诸单例模式(如游戏状态对象)?

标签: unity3dsingletongame-enginescenegameobject

解决方案


您可以采取以下方法:

在创建 GameObject 的场景中,在附加到 GameObject 的 MonoBehavior 脚本中:

在同一场景和后续场景中,在附加到其他游戏对象的 MonoBehavior 脚本中。

这将允许您在没有单例的情况下访问名为“FindMeInEveryScene”的游戏对象。

把这一切拉到一起……

全球游戏对象.cs

// Attached to the GameObject that needs to be accessd by any other
// GameObjects and needs to survive between loading scenes
public class GlobalGameObject : MonoBehaviour
{
    static bool gameObjectInitialized = false;

    void Awake()
    {
        if ( !gameObjectInitialized )
        {
            gameObject.name = "FindMeInEveryScene";
            DontDestroyOnLoad( gameObject );
            gameObjectInitialized = true;
        }
    }
}

使用GameObject.cs

// Attached to GameObjects that need access to the GlobalGameObject
public class UsingGameObject : MonoBehaviour
{
    private GameObject globalGameObject = null;

    void Start()
    {
        globalGameObject = GameObject.Find( "FindMeInEveryScene" );
    }
}

推荐阅读