我正在尝试在导出时从3dsmax在FBX文件中编写自定义数据。即使我现在还不知道如何做到这一点,这是可能的 但我的问题是如何在导入时读取Unity内的自定义FBX数据。
非常感谢。
答案 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的含义。