我目前正尝试使用单例模式作为Unity游戏中任务组织的全局数据结构。
我的单例类代码如下:
public class TaskManager : MonoBehaviour
{
private List<Task> Tasks;
private static TaskManager instance;
private TaskManager()
{
Tasks = new List<Task>();
}
public static TaskManager Instance
{
get
{
if(instance == null)
{
instance = new TaskManager();
}
return instance;
}
}
}
我将这个例子作为我的课程基础: https://msdn.microsoft.com/zh-cn/library/ff650316.aspx 然而,问题是,当我尝试在不同的脚本中访问TaskManager时,值并没有被保存。
例如,在一个脚本中,我做如下操作:
TaskManager tm = TaskManager.Instance;
Task newTask = new Task();
tm.PushTask(newTask);
print(tm.GetTaskList().Count);
通过这个,我可以看到TaskManager有一个计数为1,显示了新的任务。
但是我的另一个脚本试图从TaskManager中读取:
TaskManager tm = TaskManager.Instance;
List<Task> l = tm.GetTaskList();
print(l.Count);
当我执行此操作时,Count返回为0,表明来自世界的上述任务未保存到TaskManager中。
我非常确定错误是由于我误解了如何使用单例模式导致的。我需要实现一个TaskManager Instance的set属性吗?还是我犯了其他错误?
谢谢!
编辑:
PushTask()代码如下:
public void PushTask(Task t)
{
Tasks.Add(t);
}
PushTask()
方法的代码吗? - Bartłomiej ZielińskiInstance
,而不是将其分配给新变量,那么在这两种情况下仍然会发生吗? - Dion V.MonoBehaviour
继承,您需要创建一个GameObject
,将其设置为DontDestroyOnLoad
并将您的实例作为组件添加到其中。您不应该使用new SomeComponent()
,Unity以不同的方式处理组件(和UnityEngine.Object
),它会接管您的内存管理。 - Aidiakapi