这只是一个使我在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>();
}
}
然后以
的形式得出我们的GameManagerGamaManager : 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();