【问题标题】:How to create a scene without the Unity 3D editor如何在没有 Unity 3D 编辑器的情况下创建场景
【发布时间】:2023-01-13 04:13:44
【问题描述】:

我有以下问题:

  • 我有一个 3D 引擎有它们的场景,但它们与 Unity 不兼容。
  • 但是我有这个另一个 3D 引擎的关于场景中所有内容的元数据,例如:位置、灯光、模型、光探测器、物理、相机等...
  • 我想在 Unity 上重新创建这个场景,但以编程方式对我拥有的元数据执行解析器,但不使用 Unity 编辑器。 (最后我会有一个 .scene 文件和一些创建的预制件)
  • 但同时我希望能够在 Unity 编辑器中加载这个创建的场景(从元数据)(因为我现在是为 Unity 创建的)
  • 我希望将所有模型和事物创建为预制件,以便将来能够使用可寻址。

这可行吗?

也许有办法创建 UnityYAML 场景文件吗?

【问题讨论】:

  • 这并非不可能,但需要大量的工作和大量的反复试验。无论如何,您很可能不得不在 Unity 中构建场景,只是为了能够查看您的转换器编写的内容是否类似于 Unity 处理序列化的方式。当然,这比在编辑器中将它们放在一起要多得多,因此您需要决定是否足够使用它来完成创建它所花费的时间,从而真正节省时间和工作量。
  • @RetiredNinja 你是说这可以通过 UnitYAML 场景安装实现吗?
  • 相反,将旧场景的数据导出为 JSON 或 XML 等格式的数据文件,然后在 Unity 中编写代码以导入数据并使用 Instantiate(prefabs) 重新创建场景会更容易。您无需了解 Unity 如何构建其场景和预制文件,并且使用您自己的代码调试导出的数据文件要容易得多

标签: c# unity3d assetbundle addressables


【解决方案1】:

看起来这将是一个两步过程:

解析您现有的数据结构并将它们创建为场景中的游戏对象/组件。您应该能够使用附加到常规游戏对象的常规 ol' 脚本来执行此操作。对我来说,我会称之为“CustomSceneLoader”之类的东西。开始时,读取您的数据文件,解析它,并使用该数据实例化 GameObjects。

从那里,您似乎可以使用 PrefabUtility 根据场景中的游戏对象创建新的预制件。也许作为第 1 步的一部分,您附加了一个自定义组件,该组件向检查器添加了一个按钮,该按钮将从 GameObject 创建一个预制件。

例如:

PrefabUtility.SaveAsPrefabAssetAndConnect(gameObject, localPath, InteractionMode.UserAction, out prefabSuccess);

【讨论】:

    【解决方案2】:

    正如 Retired Ninja 在 cmets 中提到的那样

    UnityYAML 只是基于YAML,这是一种原始文本文件格式(类似于 JSON)

    =>当然理论上你能够在没有 Unity 的情况下完全从头开始生成这样一个文件和所有内容预制件以及 .meta 文件和 GUID。

    这基本上意味着您必须复制 Unity 编辑器的整个部分。

    这可行吗?

    理论上是的,但问题是,这真的值得花时间和努力吗?我对此表示怀疑。


    相反,我宁愿取决于您的确切文件格式

    • 搜索此文件格式可能已经存在的任何插件/外部库

    • 如果真的不存在,你又有多种选择

    • 从已经理解您现有文件格式的其他引擎将内容导出为 Unity 理解的内置格式

      例如

      • 将所有网格导出为 FBX(-> 已经支持嵌入材质、纹理和层次结构)
      • 导出层次结构,例如作为 JSON 或任何文本文件
      • 然后在Unity中根据这些重建场景
    • 实现您自己的自定义 Scripted Importer,它可以直接解析您的原始文件并将其(它们)直接转换为 Unity 中的场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      相关资源
      最近更新 更多