Самый простой способ сделать это — добавить пользовательский атрибут к объекту в сцене 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 и передавая JSON в виде строкового атрибута; это обычно легче поддерживать, чем сеть с несколькими именами и типами атрибутов.
Имейте в виду, что FBX имеет тенденцию коверкать длинные имена атрибутов - я не уверен, где находится отсечка, но очень длинные имена атрибутов иногда усекаются до бессмысленной строки, такой как `FBXASC_012345", если они превышают количество магических символов.
Единственное, что вы не можете легко сделать таким образом, это данные уровня вершин или граней; хотя вы можете упаковать такие вещи в пользовательские атрибуты, нет твердой гарантии, что индексы, которые вы видите в Max/Maya, будут такими же, как в FBX. Для этого типа данных цвета вершин или дополнительные UV-каналы являются хорошими местами для хранения дополнительной информации, хотя вам решать, как решить, что означает данный цвет или UV.
person
theodox
schedule
02.09.2015