我正在将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;
}
我尝试过的代码(WorkerAI):
void Start()
if (CompareTag("New Worker")) {
DontDestroyOnLoad(gameObject);
}
}
答案 0 :(得分:0)
我明白了。事实证明我的代码很好......在大多数情况下。在用于实例化其他工作人员的代码段中,您可以看到以下行:
_worker.transform.parent = GameObject.Find ("Workers").transform;
这里我要做的就是为新的工作者游戏对象设置父变换,这也是现有工作者的父变换。我注释掉了这一行,当场景发生变化时,我的工作人员仍然在层次结构中。
我相信发生的事情,如果我在这里不正确,请纠正我,原因是游戏对象的父母被摧毁,导致这个和所有其他工作者游戏对象也被摧毁。