是否可以将下载的游戏对象(使用 assetbundle)保存为预制件而不是 Unity3d 文件?
Is It Possible To Save Downloaded gameobject(using assetbundle) as Prefab not Unity3d file?
我原来的预制件(附加模型、着色器、动画、material、脚本等)不小心消失了。我只能通过服务器下载 unity3d 文件。下载的对象在 UnityEditor 中可见。但我不能将它们存储为预制件(使用拖放或脚本)。缺少所有组件。
问题:
- 为什么这是不可能的(游戏对象加载到 RAM 中,但为什么我不能将它们存储在磁盘中)?
- 我怎样才能恢复它们?
简短的回答是否定的,您不能只在 运行 时间创建预制件。
原因是制作预制件是仅依赖于 prefabUtility which is part of the UnityEditor 命名空间的编辑器,因此只能在 运行time(依赖于 UnityEngine 命名空间)之外使用。
在 运行 时间内,几乎所有资产都被锁定为只读。
但这并不意味着完全不可能将您的游戏对象恢复为预制件。
您可以编写自己的脚本,将您想要的游戏对象序列化为 JSON 或 XML 等格式,然后制作一个反序列化此数据的编辑器脚本并重建一个新的预制出来的。你必须自己弄清楚如何精确地做到这一点,因为我个人没有任何关于如何最好地处理这个的例子。
有关 JSON 序列化的更多信息,请参见 here
我原来的预制件(附加模型、着色器、动画、material、脚本等)不小心消失了。我只能通过服务器下载 unity3d 文件。下载的对象在 UnityEditor 中可见。但我不能将它们存储为预制件(使用拖放或脚本)。缺少所有组件。
问题:
- 为什么这是不可能的(游戏对象加载到 RAM 中,但为什么我不能将它们存储在磁盘中)?
- 我怎样才能恢复它们?
简短的回答是否定的,您不能只在 运行 时间创建预制件。
原因是制作预制件是仅依赖于 prefabUtility which is part of the UnityEditor 命名空间的编辑器,因此只能在 运行time(依赖于 UnityEngine 命名空间)之外使用。
在 运行 时间内,几乎所有资产都被锁定为只读。
但这并不意味着完全不可能将您的游戏对象恢复为预制件。
您可以编写自己的脚本,将您想要的游戏对象序列化为 JSON 或 XML 等格式,然后制作一个反序列化此数据的编辑器脚本并重建一个新的预制出来的。你必须自己弄清楚如何精确地做到这一点,因为我个人没有任何关于如何最好地处理这个的例子。
有关 JSON 序列化的更多信息,请参见 here