Unity - 自定义导出和导入 FBX 数据

Unity - custom Export and Import FBX Data

我正在尝试在导出时从 3dsmax 将自定义数据写入 FBX 文件。即使我现在不知道该怎么做,这也是可能的。
但我的问题是如何在导入时读取 Unity 中的自定义 FBX 数据。

非常感谢。

执行此操作的简单方法是向 Maya/Max 场景中的对象添加自定义属性,然后使用 Unity AssetPostprocessor 查找属性并解析其数据。

AssetPostprocessor 有一个 OnPostprocessGameObjectWithUserProperties 回调,它会在应用了自定义属性的 fbx 文件中的每个转换时触发。你会想在后处理器中找到你的属性并做一些事情:

public void OnPostprocessGameObjectWithUserProperties(GameObject incomingGameObject, string[] incomingPropetyNames, object[] incomingValues)
{
    var thisModelImporter = this.assetImporter as ModelImporter;
    var meta_key = "your_attribute_name";
    if (incomingPropetyNames.Contains(meta_key))
    {
        string raw_data = (string)incomingValues[Array.IndexOf(incomingPropetyNames, meta_key)];
        // use the data here....
    }
}

令人恼火的是,没有创建文件级元数据的标准方法,我通常只是将 'top level' 数据附加到 FBX 文件中模型的根之类的东西。您可以通过将事物存储为 JSON blob 并将 JSON 作为字符串属性传递来传递复杂数据;这通常比具有多个属性名称和类型的网络更容易维护。

请注意,FBX 倾向于破坏长属性名称 - 我不确定截断点在哪里,但如果超长属性名称有时会被截断为无意义的字符串,如 `FBXASC_012345"字符数。

您唯一无法通过这种方式轻松完成的是顶点或面级数据;虽然您可以将此类内容打包到自定义属性中,但并不能绝对保证您在 Max/Maya 中看到的索引与 FBX 中的索引相同。对于这种类型的数据,顶点颜色或额外的 UV 通道是存储额外信息的好地方,尽管您可以想出一种方法来决定给定颜色或 UV 的含义。