是否可以在 Unity 中保存 GameObject 及其组件?

Posted

技术标签:

【中文标题】是否可以在 Unity 中保存 GameObject 及其组件?【英文标题】:Is it possible to save a GameObject with its components in Unity? 【发布时间】:2018-02-25 02:36:06 【问题描述】:

我正在尝试保存/序列化一个 GameObject 及其组件(使用它们的当前值),但我认为这是不可能的,有什么想法吗???

请记住,我不想使用资产商店中的资产,我想自己编写代码。 在此先感谢:)

【问题讨论】:

你不能序列化一个游戏对象。只需序列化附加到该游戏对象的组件的值。这意味着您必须创建一个脚本来保存您希望能够序列化和反序列化的重要游戏变量。该脚本不应继承自 MonoBehaviour 我的情况下的变量类型无法序列化,这就是问题... 变量类型有哪些? 一个引用其他类的变量,例如... 就像我的第一条评论所说,一个类可以被序列化,但它不能继承自MonoBehaviour 【参考方案1】:

抱歉,我没有代表发表评论。我使用两种方法来实现这种保存状态。 首先是程序员似乎建议的,创建一个类来承载重新创建对象所需的属性。组件名称可以保存为字符串,然后使用 gameObject.AddComponent(Type.GetType(componentName)); 如果你经常这样做,可能值得先看看这个论坛。Here

您可以使用统一序列化程序序列化这些类(类型的字符串名称将序列化。您可能必须创建一个子类来处理每个不同类型对象中的值。

这可能是一种相当复杂的方法,因此我更喜欢在资源文件夹中为预制件序列化的文件路径。任何需要保存的值都可以保存在可序列化的类中,例如在保存的预制件上的脚本中引用的第一种方法。该脚本有一个方法可以在创建预制件时将反序列化类中保存的所有详细信息应用到预制件。详细信息由脚本捕获,添加到类中,并在需要记录对象状态时进行序列化。

管理的确切方式可能会有所不同,但我自己已经这样做了,因为他能够存储我可能需要的任何值。即使您使用资产商店中的第三方序列化程序,您仍然无法保存整个对象,但您将能够获得足够的信息来重新创建。

【讨论】:

【参考方案2】:

我已经设法保存了我想要的组件(自定义脚本),方法是将它们保存在一个 json 文件中,然后用二进制序列化它们,这样它们就更安全了。 感谢所有试图帮助你的人......

【讨论】:

以上是关于是否可以在 Unity 中保存 GameObject 及其组件?的主要内容,如果未能解决你的问题,请参考以下文章

《Unity_API解析》 第八章 Quaternion类

Unity编辑器生成可配置编辑文件

Unity 在销毁前一个对象 1 秒后实例化新对象

unity游戏退出发http

Unity怎么保存文件?保存文件然后继续做?

unity 3D 怎么保存文件,可以以后接着做?