Unity Singleton Pattern



这只是一个使我在Unity上打扰我的问题。

我们经常使用诸如游戏经理之类的单身对象,因此有两种方法可以解决。

一个是使用singleton.cs c尖锐类,如下:

using System;
using System.Linq;
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
    static T instance;
    DateTime BirthTime;
    public static T Instance
    {
        get
        {
            if (instance == null)
                Initialize();
            return instance;
        }
    }
    private void Awake()
    {
        BirthTime = DateTime.Now;
    }
    public static void Initialize()
    {
        if (instance == null)
            instance = FindObjectOfType<T>();
    }
}

然后以

的形式得出我们的GameManager
GamaManager : Singleton<GameManager>

在大众意见中,这种方法是CPU的消耗,尤其是在移动设备上,因为Unity必须通过层次结构进行众多对象,以使用Singleton中提到的初始化方法。

一种更简单的方法是创建私有实例并在开始或清醒时将其初始化为:

GameManager : MonoBehaviour
{
    public static GameManager Instance { get; private set; }
    void Start()
    {
        Instance = this;
    }
}

但我认为,就像一次又一次地编写相同的代码一样。有人可以建议采用更清洁的方法吗?

我不确定您确切想要什么,但是在Singleton模式中,我更喜欢在GameManager之类的主类中,并通过使用此代码将其设置为Singleton类:

static GameManager _instance;
    public static GameManager instance {
        get {
            if (!_instance) {
                _instance = FindObjectOfType<GameManager>();
            }
            return _instance;
        }
    }

或您编写的代码片段,此后根据其他子管理器类型定义变量,并由GameManager Singleton访问它们。

例如:

public BulletManager myBulletManager;

并这样使用:

GameManager.instance.myBulletManager.Fire();

最新更新