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