AdvParameterEventTrigger


投稿日:2024年5月31日 | 最終更新日:2024年5月31日

概要

パラメーターの変更があったときにイベントを発生するコンポーネントです。
パラメーターの変更だけで表示非表示を切り替えたり、UIの文字などを変更することが可能になります。

リファレンス

名前 内容
OnChanged 任意のパラメーターが変更されたときに呼ばれるイベント
OnChangedByNamesEvents 指定の名前のパラメーターが変更されたときに呼ばれるイベント
OnChangedBoolParamEvents 指定の名前のBool型のパラメーターが変更されたときに呼ばれるイベント
OnChangedFloatParamEvents 指定の名前のFloat型のパラメーターが変更されたときに呼ばれるイベント
OnChangedIntParamEvents 指定の名前のInt型のパラメーターが変更されたときに呼ばれるイベント
OnChangedStringParamEvents 指定の名前のString型のパラメーターが変更されたときに呼ばれるイベント

サンプルコード

インスペクター上でイベントを設定する以外に、プログラムからイベントを登録できるので、
グラフィックオブジェクトなど動的に生成するもので利用することも可能です。

using UnityEngine;

namespace Utage
{
    //パラメーター変更イベントのサンプル
    public class SampleParamTrigger : MonoBehaviour
    {
        public AdvEngine advEngine;
        public string paramName = "";
        public string paramNameBool = "";
        public string paramNameFloat = "";
        public string paramNameInt= "";
        public string paramNameString = "";

        private void Awake()
        {
            if (advEngine == null) return;
            //イベントリスナーの登録
            advEngine.ParameterEventTrigger.OnChanged.AddListener(OnChanged);
            advEngine.ParameterEventTrigger.AddEventByName(paramName, OnChangedByName);
            advEngine.ParameterEventTrigger.AddBoolEvent(paramNameBool, OnChangedBool);
            advEngine.ParameterEventTrigger.AddFloatEvent(paramNameFloat, OnChangedFloat);
            advEngine.ParameterEventTrigger.AddIntEvent(paramNameInt, OnChangedInt);
            advEngine.ParameterEventTrigger.AddStringEvent(paramNameString, OnChangedString);
        }

        void OnDestroy()
        {
            //イベントリスナーの解除
            //特に動的に生成・削除されるものに対しては、忘れずに解除すること
            if(advEngine==null) return;
            advEngine.ParameterEventTrigger.OnChanged.RemoveListener(OnChanged);
            advEngine.ParameterEventTrigger.RemoveEventByName(paramName, OnChangedByName);
            advEngine.ParameterEventTrigger.RemoveBoolEvent(paramNameBool, OnChangedBool);
            advEngine.ParameterEventTrigger.RemoveFloatEvent(paramNameFloat, OnChangedFloat);
            advEngine.ParameterEventTrigger.RemoveIntEvent(paramNameInt, OnChangedInt);
            advEngine.ParameterEventTrigger.RemoveStringEvent(paramNameString, OnChangedString);
        }

        //パラメーターが変更されたとき呼ばれる
        void OnChanged(AdvParamData param)
        {
            Debug.Log($"OnChanged {param.Key}  {param.Parameter}" );
        }

        //指定の名前のパラメーターが変更されたとき呼ばれる
        void OnChangedByName(AdvParamData param)
        {
            switch (param.Type)
            {
                case AdvParamData.ParamType.Bool:
                    Debug.Log($"OnChangedByName {param.Key}  {param.BoolValue}");
                    break;
                case AdvParamData.ParamType.Float:
                    Debug.Log($"OnChangedByName {param.Key}  {param.FloatValue}");
                    break;
                case AdvParamData.ParamType.Int:
                    Debug.Log($"OnChangedByName {param.Key}  {param.IntValue}");
                    break;
                case AdvParamData.ParamType.String:
                    Debug.Log($"OnChangedByName {param.Key}  {param.StringValue}");
                    break;
            }
        }

        //指定の名前のbool値が変更されたとき呼ばれる
        void OnChangedBool(bool value)
        {
            Debug.Log($"OnChangedBool {paramNameBool}  {value}");
        }

        //指定の名前のfloat値が変更されたとき呼ばれる
        void OnChangedFloat(float value)
        {
            Debug.Log($"OnChangedFloat {paramNameFloat}  {value}");
        }

        //指定の名前のint値が変更されたとき呼ばれる
        void OnChangedInt(int value)
        {
            Debug.Log($"OnChangedInt {paramNameInt}  {value}");
        }

        //指定の名前のstring値が変更されたとき呼ばれる
        public void OnChangedString(string value)
        {
            Debug.Log($"OnChangedString {paramNameString}  {value}");
        }
    }
}

注意点

Paramコマンドなどで、パラメーターが個別に変更されたときのみイベントが発生する点に注意してください。
パラメーター全体の初期化やリセット、セーブデータのロードのタイミングでは呼ばれないので、必要に応じてAdvEngineの初期化時やセーブデータのロード時に別途イベント処理を実装する必要があります。
以下の表を参考にしてください。

タイミング イベント
AdvEngineの初期化時(システムセーブデータロード後) AdvEngineのOnPostInit
AdvEngineの終了時 AdvEngineのOnClear
セーブデータのロード後 AdvScenarioPlayerのOnBeginScenarioAfterParametersInitialized