【问题标题】:Unity - custom Export and Import FBX DataUnity - 自定义导出和导入 FBX 数据
【发布时间】:2015-11-27 15:27:25
【问题描述】:

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

非常感谢。

【问题讨论】:

    标签: unity3d maya 3dsmax fbx


    【解决方案1】:

    执行此操作的简单方法是向 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....
        }
    }
    

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

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

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

    【讨论】:

    • 感谢@theodox,这似乎是一个不错的解决方案。但是由于我是这个主题的新手,我很难找到一种方法来将自定义属性中的 JSON 数据写入 3dsmax 中的对象。我还认为使用 FBX SDK 将允许在 FBX 中写入任何自定义数据,但如何在 Unity 中解析它。
    • 好吧,我在 3dsmax 中找到了用户定义的对象属性面板,所以我可以添加 JSON 并使用 UDP3DSMAX 条目在 Unity 中解析它。但是有没有办法添加新的自定义属性并设置它们?
    • 似乎自定义属性也可以使用 OnPostprocessGameObjectWithUserProperties 导出和使用。
    • 听起来你已经明白了 - 一个包含转义 JSON 然后在 C# 中解析的字符串自定义属性
    猜你喜欢
    • 2012-02-11
    • 2021-07-10
    • 2019-09-01
    • 2021-03-24
    • 1970-01-01
    • 2020-10-15
    • 2018-10-05
    • 2020-08-28
    • 1970-01-01
    相关资源
    最近更新 更多