【问题标题】:UNITY C# - How can I save a Game Object, that has been instantiated in a runtime, in a runtime?UNITY C# - 如何在运行时中保存已在运行时实例化的游戏对象?
【发布时间】:2020-08-23 20:48:26
【问题描述】:

我有一个我在运行时实例化的游戏对象。然后,我对其进行了一些更改,例如:添加一些子对象、组件等。 我想以某种方式保存这个新创建的对象,以供我在其他场景和会话中使用。 问题是:如何? 谢谢。

PS 显然我不能使用 UnityEditor 命名空间

【问题讨论】:

标签: c# unity3d


【解决方案1】:

如果您想在其他场景中重复使用该对象,您可以使用DontDestroyOnLoad 方法来防止它在更改场景时被破坏。之后,如果您的目标是生成此对象的副本,您可以禁用它并将其视为预制件,并在必要时实例化它的副本。

如果您希望在重新启动游戏后能够重新使用对象,您可能想查看在 Unity 中保存数据的方法。一种简单的方法是使用PlayerPrefs,但您必须自己编写代码来加载/保存对象的状态,因为它只能直接保存intfloatstring 数据类型值.

这里有几个参考: https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

编辑:

您可以尝试的更具体的解决方案是将您创建的自定义类序列化为JSON 文件。该类将包含必要的数据,以重新创建您在场景中拥有的任何 GameObject

不能在编辑器之外创建预制件。这是一个参考:https://www.reddit.com/r/Unity3D/comments/a5c02u/save_gameobject_as_prefab_at_runtime/

【讨论】:

  • 这绝对不够。我要保存的场景对象非常复杂;它有很多孩子,组件和东西。问题是它是随着用户玩游戏而逐渐构建的,然后我想以某种方式保存它以便在下一个会话中实例化它。
  • 绝对够了。您可以尝试查看 JSON 格式作为一个选项,并查看称为序列化/反序列化的概念。
猜你喜欢
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多