既存のUnityコンポーネント派生スクリプトは、カスタムアトリビュートを介してアセットの出力GameObjectに取り付けることができます。 さらに、オプションの文字列引数を使用して、そのスクリプトの関数を呼び出すこともできます。 これは、アセットが完全にクックされ、すべての出力が生成された後に実行されます。 指定したコンポーネントは、GameObjectがまだそれを持っていない場合にのみ追加されることに注意してください。 ただし、関数は再クックされる度に呼び出されます。
アトリビュートは、 文字列 タイプの Detail アトリビュートで、名前は unity_script でなければなりません。次のような形式を使用します:
script_component_name:function_name:argument
script_component_name
は、Unityコンポーネント派生クラスの名前である必要があります。
function_name
は、コンポーネント内の関数の名前である必要があり、オプションです。
関数を呼び出す場合、そのクラスには[ExecuteInEditMode]
タグも付いていなければなりません。
argument
は任意の文字列値で、オプションです。
これを使用すると、任意の値をパックして送信し、受け側で解析させることができます。
例えば、以下のTest.csというスクリプトがあるとしましょう:
[ExecuteInEditMode] public class Test : MonoBehaviour { public string _msg; void HDACallbackWithMsg(string msg) { Debug.Log("Callback with msg: " + msg); } void HDACallbackNoMsg() { Debug.Log("Callback with no msg"); } }
この場合、カスタムアトリビュートは、コールバックに応じて以下のいずれかになります:
スクリプトの取り付けのみ。コールバックはなし:
Test
スクリプトを取り付け、引数なしでコールバック:
Test:HDACallbackNoMsg
スクリプトを取り付け、引数ありでコールバック:
Test:HDACallbackWithMsg:hey this is a message
スクリプト名の間にセミコロンを追加することで、複数のスクリプトを取り付けることができます:
ScriptA:FunctionA:MsgA;ScriptB:FunctionB:MsgB;ScriptC:FunctionC:MsgC
動作しているサンプルを確認したい場合は、Unityで _HoudiniEngineUnity/Examples/HEU_Example_Unity_Script.hda_ をロードしてください。 アセットの出力GameObjectに _HoudiniEngineUnity/Scripts/Examples/HEU_ScriptCallbackExample.cs_ を取り付け、“Hello”というメッセージを含む引数で関数を呼び出します。