インポートファイルで少なくとも一つのユーザープロパティーがアタッチされたおのおののゲームオブジェクトごとに呼び出されます
二番目の引数の文字列配列(propNames)は、見つける事のできるプロパティーすべての名称を含みます。
System.Object 配列(値)は、現在の値すべてを含みます。値は、 string、Vector4、bool、Color、float、int のいずれかです。
この機能の典型的なユースケースは 3ds Max / Maya オブジェクトに格納された "ユーザーデータ" の読み出しです。オブジェクトのテキストユーザーデータに書かれている内容にもとづき、ゲームオブジェクトを異なる方法で後処理できます。
関数が呼び出されるステージに関する詳細は、 AssetPostprocessor を参照してください。
ゲームオブジェクトとメッシュはインポート中しか存在せず、その後すぐに破棄される事に注意してください。
この関数は最終のプレハブが作成される前、そしてディスクに書き込みされる前に呼び出されるため生成されたゲームオブジェクトとコンポーネントに対して完全に制御ができます。
インポート完了後、ゲームオブジェクトやメッシュに対する参照はすべて無効になります。したがって、インポートされた FBX ファイルのメッシュを参照する OnPostprocessGameObjectWithUserProperties から、異なるファイルとして新しいプレハブを作成することはできません。
以下のサンプルの JS は、ユーザーデータの文字列に "addboxcollider" が含まれている場合に、シンプルな BoxCollider コンポーネントを追加するものです。 C# 版でも同様です。
class MyPostprocessor extends AssetPostprocessor {
function OnPostprocessGameObjectWithUserProperties ( go : GameObject, propNames : String[], values : System.Object[]){ for (var i : int = 0; i < propNames.Length; i++) { var propName : String = propNames[i]; var value : Object = values[i];
Debug.Log("Propname: " + propName + " value: " +values[i]);
if (value.GetType() == String) { var s : String = value; if (s.Contains("addboxcollider")) go.AddComponent.<BoxCollider>(); } if (value.GetType() == Vector4) { var v : Vector4 = value; // do something useful. } if (value.GetType() == Color) { var c : Color = value; // do something useful. } if (value.GetType() == int) { var myInt : int = value; // do something useful. } if (value.GetType() == float) { var myFloat : float = value; // do something useful. } } } }
using UnityEngine; using UnityEditor; using System; using System.Collections;
public class ExampleClass : AssetPostprocessor {
void OnPostprocessGameObjectWithUserProperties ( GameObject go, string[] propNames, System.Object[] values) { for (int i = 0; i < propNames.Length; i++) { string propName = propNames[i]; System.Object value = (System.Object)values[i];
Debug.Log("Propname: " + propName + " value: " +values[i]);
if (value.GetType().ToString() == "System.Int32") { int myInt = (int)value; // do something useful }
// etc... } } }