【问题标题】:In Unity, how can I save a list of gameobjects, including their state and make them persist into the next scene?在 Unity 中,如何保存游戏对象列表,包括它们的状态并让它们持续到下一个场景中?
【发布时间】:2015-09-16 15:19:36
【问题描述】:

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

【问题讨论】:

  • 您可以通过为初学者编写代码来做到这一点。如果您的代码有问题,请认真注意。当他们看不到代码时,如何知道您在做什么您所看到的.. 还学习使用您可以使用的工具,例如调试器.. 逐步检查您的代码并尝试查明发生故障的位置..
  • 相当基本,但我在我的问题中添加了相关代码。此外,我知道在这种情况下唯一没有帮助的 Unity 调试器是帧调试器。我不确定我错过了什么或者我到底做错了什么。那是我的问题。
  • 这里有 Visual Studio 调试器,或者你用来编写 C# 代码的任何其他程序。Unity 默认有一些东西,但我不记得它是什么我的脑袋。
  • 我正在使用 Notepad++ 进行脚本编辑,但我可以试试 VS 调试器,看看它是否能告诉我一些信息。

标签: c# unity3d


【解决方案1】:

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

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

我在这里所做的只是为新的工人游戏对象设置父变换,这也是现有工人的同一个父对象。我注释掉了这条线,当场景改变时,我的工人仍然在层次结构中。

我相信发生的事情,如果我在这里不正确,请纠正我,是由于游戏对象的父对象被销毁,这导致该游戏对象和所有其他工作游戏对象也被销毁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多