SendMessage
宴のシナリオから、Unity側の処理のプログラムを呼ぶ。簡易的な拡張機能のためのもの。
サンプル
リファレンス
Command | 説明 | Arg1 | Arg2 | Arg3 | Arg4 | Arg5 | Arg6 |
---|---|---|---|---|---|---|---|
SendMessage | あらかじめ設定されたAdvEngine外のオブジェクトにSendMessageをする 簡易的な拡張機能のためのもの |
識別のための名前 | 任意 | 任意 | 任意 | 任意 | 任意 |
SendMessageを使うと、宴のシナリオから、Unity側で用意してある独自処理を呼ぶことができます。
SendMessageを使うための準備
SendMessageを受け取るには、AdvScenarioPayerコンポーネントにメッセージを受け取るオブジェクトを設定します。
メッセージを受け取るコンポーネントをアタッチしたオブジェクトをドラッグ&ドロップで設定する
SendMessageを受け取るサンプル
RecievMessageオブジェクトには、メッセージを受け取るスクリプトをAddComponentする必要があります。
メッセージを受け取るコンポーネントには、
- OnDoCommand SendMessageコマンドの中身を受け取るメソッド
- OnWait SendMessageコマンドを待機させるかどうかのメソッド
以上、二つが必要になります。サンプルをみてみましょう
using UnityEngine; using UnityEngine.UI; using Utage; /// <summary> /// ADV用SendMessageコマンドから送られたメッセージを受け取る処理のサンプル /// </summary> [AddComponentMenu("Utage/ADV/Examples/UtageRecieveMessageSample")] public class UtageRecieveMessageSample : MonoBehaviour { public AdvEngine engine; //Advエンジン本体 public InputField inputFiled; //テキスト入力用のオブジェクト void Awake() { inputFiled.gameObject.SetActive(false); } //SendMessageコマンドが実行されたタイミング void OnDoCommand(AdvCommandSendMessage command) { switch (command.Name) { case "DebugLog": DebugLog(command); break; case "InputFileld": InputFileld(command); break; default: Debug.Log("Unknown Message:" + command.Name ); break; } } //SendMessageコマンドの処理待ちタイミング void OnWait(AdvCommandSendMessage command) { switch (command.Name) { case "InputFileld": //インプットフィールドが有効な間は待機 command.IsWait = inputFiled.gameObject.activeSelf; break; default: command.IsWait = false; break; } } //デバッグログを出力 void DebugLog(AdvCommandSendMessage command) { Debug.Log(command.Arg2); } //設定された入力フィールドを有効化 void InputFileld(AdvCommandSendMessage command) { inputFiled.gameObject.SetActive(true); inputFiled.onEndEdit.RemoveAllListeners(); inputFiled.onEndEdit.AddListener((string text) => OnEndEditInputFiled(command.Arg2, text)); } //入力終了。入力されたテキストを宴のパラメーターに設定する void OnEndEditInputFiled(string paramName, string text) { if (!engine.Param.TrySetParameter(paramName, text)) { Debug.LogError(paramName + "is not found"); } inputFiled.gameObject.SetActive(false); } }
これはあくまでサンプルです。
このスクリプトをコピーするなりして、好きな名前のスクリプトを作ってください。
OnDoCommandとOnWait中身は処理に応じて書き換えてください。
command.Nameには、エクセルのSendMessageコマンドの「Arg1」で設定した文字が入ります。
Arg1を独自拡張する処理の名前として、switch文などで、独自拡張の処理をそれぞれ記述していってください。
commandのメンバには、Arg2~5までの文字列が入っているので、それぞれ好きなように使ってみてください。
補足 宴のパラメーター操作
また、宴のシナリオ内で使用するパラメーターは
public AdvEngine engine; void Hoge() { engine.Param.GetParameter(“flag1"); engine.Param.TrySetParameter(“flag1”,true); }
などとして、スクプト上から操作可能なので、複雑な計算等をしたい場合は
SendMessageのタイミングで計算処理を呼び出し、その結果だけを
engine.Param内に設定するなどする・・・といった使い方もできます。
注意点
SendMessageでUnity側に独自に用意した機能は、宴でのセーブロードの対象にならないので注意してください。
たとえば、この機能で独自のオブジェクトを表示するなどしても、ロード後には消えてしまいます。
基本的にはそのページ内で完結する処理にすれば、セーブロードには関係ないので、ページをまたぐような処理にしなければ大丈夫です。
また、SendMessageの結果を今回のサンプルのようにパラメーターとして保存した場合も、セーブロードされるのでそういった使い方は大丈夫です。
もちろん、セーブロードを使用しない場合には自由に使っても大丈夫です。