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

标签 unity-game-engine maya 3dsmax fbx

我正在尝试在导出时将自定义数据写入 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....
    }
}

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

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

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

关于unity-game-engine - Unity - 自定义导出和导入 FBX 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32347772/

相关文章:

iphone - 将 POD 格式从 3D Max 导出到 cocos3D

three.js - 需要有关从 3ds Max 导出到 three.js 的最佳工作流程的建议

c# - 生成 1 到 10 之间的唯一随机数?

unity-game-engine - 团结 : Instantiating prefab appears at wrong location

c++ - Maya API 到 C++

c++ - Maya MFnPlugin::registerUI 调用 Python 而不是 MEL 脚本

c# - 正则表达式查找由一组字母组成的单词

c# - 我如何知道我在 Unity 上单击了哪个 GameObject?

python - 类型错误 : 'NoneType' object is not iterable in maya python

javascript - Three.js 加载的模型缺少凹凸和高光贴图