SendMessageByName


宴のシナリオから、Unity側の指定の名前のオブジェクトにSendMessageする。
SendMessageコマンドよりもさらに簡易的に使用可能。

リファレンス

Command 説明 Arg1 Arg2 Arg3 Arg4 Arg5 Arg6
SendMessageByName 指定の名前のGameObjectにSendMessageする GameObject名 呼び出すメソッド名 任意引数 任意引数 任意引数 任意引数
BroadcastMessageByName 指定の名前のGameObjectにBroadcastMessageする GameObject名 呼び出すメソッド名 検索対象 任意引数 任意引数 任意引数

SendMessageByName

簡易的な拡張のためのコマンドです。
事前の設定が必要ないためSendMessageコマンドよりも簡易的に使えるほか、動的に作成するオブジェクトにも使用可能です。

ただ、対象のオブジェクトを探すために、UnityのFindObjectという処理の重い機能を使っています。
コマンド実行時に一度だけ呼ぶので、気にする必要はないかもしれませんが、速度重視するならSendMessage経由で呼ぶようにしてください。
また、全シーン内で同じ名前のGameObjectがあると間違ってそちらにメッセージを送信する可能性がありますので、
名前が重複しないGameObjectを対象にするようにしてください。

サンプル

送ったメッセージを受け取るためのコンポーネントのサンプル

SendMessageByNameは送ったメッセージを受け取るためのコンポーネントを、対象のオブジェクトにAddComponentしてある必要があります。

Arg1で指定した名前のオブジェクトをUnity側で作成し、メッセージを受け取るコンポーネントを記述する。

エクセルで記述したArg2~Textなど、各セルの内容は、command.ParseCellOptional<>で取得可能なので、柔軟に引数を持たせることが可能です。

using UnityEngine;
using Utage;
using System.Collections;

/// <summary>
/// ADV用SendMessageByNameコマンドから送られたメッセージを受け取る処理のサンプル
/// </summary>
[AddComponentMenu("Utage/ADV/Examples/SendMessageByName")]
public class SampleSendMessageByName : MonoBehaviour
{
    //Testという処理を呼ぶ。引数にはAdvCommandSendMessageByNameを持つ
    void Test(AdvCommandSendMessageByName command)
    {
        Debug.Log("SendMessageByName");
    }

    //引数を使った例
    void TestArg(AdvCommandSendMessageByName command)
    {
        Debug.Log(command.ParseCellOptional<string>(AdvColumnName.Arg3, "arg3"));
    }

    //引数を使った例
    void TestWait(AdvCommandSendMessageByName command)
    {
        StartCoroutine(CoWait(command));
    }

    //command.IsWaitでコマンド終了待ちも切り替えられる
    IEnumerator CoWait(AdvCommandSendMessageByName command)
    {
        command.IsWait = true;

        float time = command.ParseCellOptional<float>(AdvColumnName.Arg3, 0);
        while (true)
        {
            Debug.Log(time);
            time -= Time.deltaTime;
            if (time <= 0) break;
            yield return null
        }
        command.IsWait = false;
    }
}

BroadcastMessageByName

BroadcastMessageはSendMessageと似ていますが、「対象となる名前のGameObjectとその子オブジェクト以下全てのGameObject」にSendMessageがされます。
動的に作成されたり名前が決めづらいオブジェクトを対象にSendMessageをしたいときや、複数のコンポーネントに対して同じメッセージを同時に送信したいときに使用します。
ターゲットタイプを設定することで、対象を宴の描画オブジェクトに絞ることもできます。

検索対象(Arg3)

名前 説明
Default 全シーン内のすべてのGameObjectが対象
UtageObject キャラクターやBg、Spriteなど宴のオブジェクトのみが対象
RenderTexture 宴の描画オブジェクトの設定でRenderTexutureを使っている場合の設定
RenderTexutureの場合子オブジェクトしてプレハブ等のGameObjectが存在しないためその対策

空欄時はDefalutになり、Unityの全シーン内のすべてのオブジェクトが検索対象になります。
UtageObjectやRenderTextureは、描画オブジェクトにプレハブなどを使用しているときに使うことを想定しています。
プレハブ内のコンポーネントにメッセージを送信して操作したいときに使ってください。
また、UtageObjectやRenderTextureの場合は、対象のオブジェクトが限られているため検索処理が軽いです。

サンプル


送ったメッセージを受け取るためのコンポーネントのサンプル

SendMessageByNameと同様に送ったメッセージを受け取るためのコンポーネントを、対象のオブジェクトにAddComponentしてある必要があります。

public class SampleBroadcastMessageByName : MonoBehaviour
{
    //TestBroadcastMessageという処理を呼ぶ。引数にはAdvCommandSendMessageByNameを持つ
    void TestBroadcastMessage(AdvCommandBroadcastMessageByName command)
    {
        Debug.Log(command.ParseCellOptional(AdvColumnName.Arg4,""));
    }
}