序列化GameObject参考

时间:2018-11-13 19:30:54

标签: unity3d architecture

我正在研究的项目有一些特殊的设计要求,我正在尝试找到一种满足它们的解决方案(并且意识到“这是不可能的”)。

  1. 3D模型将存储在将被引用的一个或多个资产包中,以便将来的更新可以用最少的精力推送到多个应用程序(不需要重新编译40个程序)。
  2. 资产束被认为在一定程度上具有可变性(它们可以在外部进行更改以允许3D和纹理资产进行更新,更新从不应不再需要重新编译Unity exe)。
  3. 资产束中不能包含任何代码(多种原因;主要原因是Unity无法运行其dll中不存在的代码,因此脚本资产必须存在于基本应用程序中;还存在开销问题:这些模型非常细致,数百个零件(从字面上讲到单个螺丝),每个零件都可能很难处理。

我需要找到一种方法,包括编辑器和运行时,以便能够唯一地引用3D资产的各个部分,以便应用程序开发人员可以指定应用程序需要运行时哪些位具有功能和种类。才能找到此位以应用功能。

考虑的选项及其缺点:

  • 转换层次结构对象名称。如果对象被重命名,移动(重新设置)或删除(如果可能,则可能会创建不可见的依赖关系),该对象将中断。违反要求2。
  • 使用GUID。要求层次结构中的每个对象都有一个附加的脚本来存储信息。违反了要求#3。
  • 使用包含(编译到项目中)资源的资产捆绑包。违反要求#1。
  • 统一资产捆绑包可寻址。当前尚未准备好用于生产,将无法在该项目的交付期限之前及时准备好。

1 个答案:

答案 0 :(得分:0)

我会使用转换名称,但要有所不同:在文件(JSON或其他文件)中列出转换,并为每个转换提供一个GUID,然后将其也包含在包中。实际上,您将使用GUID选项,但没有脚本。如果层次结构发生更改,则只需编辑元数据文件,即可满足不重新编译的要求。