在Unity中,我如何保存游戏对象列表,包括它们的状态,并使它们持续到下一个场景
本文关键字:状态 下一个 包括它 列表 何保存 Unity 对象 游戏 保存 | 更新日期: 2023-09-27 18:13:11
我在当前的项目中使用Unity 5.2.0f3,该项目将玩家置于模拟工厂的管理角色中。玩家可以选择在游戏期间雇佣额外的工人来加速生产。玩家也可以选择不同的地板布局(Unity场景)。我遇到的问题是,由于场景变化,每次加载不同布局时,所有额外的工人都会被破坏。
我试过将DontDestroyOnLoad(gameObject)添加到Start()函数中,没有任何好处。我已经挠头有一段时间了,所以我很感谢你的帮助。
编辑:忘记添加相关代码…
我有两个脚本。HiringManager.cs用于实例化额外的工作者,并附加到一个空的游戏对象,WorkerAI.cs附加到每个工作者游戏对象并处理工作者行为。
实例化额外工人(HiringManager)的代码:
public void HireWorker(string name) {
_worker = Instantiate (worker) as GameObject;
_worker.transform.parent = GameObject.Find ("Workers").transform;
_worker.transform.position = new Vector2(-100f, -100f);
_worker.name = name;
_worker.tag = "New Worker";
_workerAI = _worker.GetComponent<NWorker.WorkerAI>();
_workerAI.isDragging = true;
}
And code that I've try (WorkerAI):
void Start()
if (CompareTag("New Worker")) {
DontDestroyOnLoad(gameObject);
}
}
我明白了。结果证明我的代码很好……在很大程度上。在实例化额外工作者的代码段中,您可以看到这一行:
_worker.transform.parent = GameObject.Find ("Workers").transform;
在这里,我所做的就是为新的工作者游戏对象设置父转换,这也是现有工作者的相同父转换。当场景改变时,我注释掉了这一行,我的worker仍然留在层次结构中。
我相信发生了什么,如果我在这里错了请纠正我,是由于游戏对象的父对象被销毁,这导致这个和所有其他工作游戏对象也被销毁。