在Unity中,我如何保存游戏对象列表,包括它们的状态并让它们持续到下一个场景?

时间:2015-09-16 15:19:36

标签: c# unity3d

我正在将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);
    }
}

1 个答案:

答案 0 :(得分:0)

我明白了。事实证明我的代码很好......在大多数情况下。在用于实例化其他工作人员的代码段中,您可以看到以下行:

_worker.transform.parent = GameObject.Find ("Workers").transform;

这里我要做的就是为新的工作者游戏对象设置父变换,这也是现有工作者的父变换。我注释掉了这一行,当场景发生变化时,我的工作人员仍然在层次结构中。

我相信发生的事情,如果我在这里不正确,请纠正我,原因是游戏对象的父母被摧毁,导致这个和所有其他工作者游戏对象也被摧毁。