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

时间:2015-09-02 08:05:53

标签: unity3d maya 3dsmax fbx

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

执行此操作的简单方法是向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作为字符串属性传递来传递复杂数据;这通常比具有多个属性名称和类型的Web更容易维护。

请注意,FBX往往会破坏长期的名称 - 我不确定截止点在哪里,但非常长的属性名称有时被截断为无意义的字符串,如`FBXASC_012345"如果他们超过魔法字符数。

你唯一不能轻易做到的就是顶点或面高度数据;虽然你可以将这类东西打包成自定义属性,但你不能确保你在Max / Maya中看到的索引与FBX中的索引相同。对于那种类型的数据,顶点颜色或额外的UV通道是存储额外信息的好地方,尽管由您决定如何确定给定颜色或UV的含义。