Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

AssetPostprocessor.OnPostprocessGameObjectWithUserProperties(GameObject,string[],object[])

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える

説明

インポートファイルで少なくとも一つのユーザープロパティーがアタッチされたおのおののゲームオブジェクトごとに呼び出されます

二番目の引数の文字列配列(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... } } }