うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】演出を Animator じゃなくて Inspector で設定するツール ~2~

【Unity】演出を Animator じゃなくて Inspector で設定するツール ~1~ - うにてぃブログ

の記事の続きです

スクリプトでの制御

各Sequence は ComponentTween クラス が管理するようになっているので

登録したIDを指定して

ComponentTween.Stop("ID");

で停止したり

ComponentTween.Play("ID");

で再生できます

終了時に処理を呼び出す

public event CompleteDelegate CompleteEvent;

終了時のイベントように上記が定義してるので、こちらにイベントを登録しておけば終了時に呼び出してくれます

しかし Loop するような設定をしていると呼び出されないので注意してください

Module の追加

ModuleAbstract を継承したクラスを作成すれば自動的に Inspector の一覧にも表示されます

例えば RectTransform のモジュールを作る場合は RectTransformModule を作成し

   [Serializable]
    public abstract class RectTransformModule : ModuleAbstract
    {
        [NonSerialized]
        protected RectTransform[] Components;

        protected override int GetComponent(GameObject[] objs)
        {
            Components = GetComponentsToArray<RectTransform>(objs);
            return Components.Length;
        }
    }

RectTransform の位置を制御するための RectTransformPositionRectTransformModule を継承して作成します

その後パラメータとして扱う型を ParamType に設定し

GetValue で値の取得処理 SetValue で値の設定処理を書くだけです

   [Serializable]
    public class RectTransformPosition : RectTransformModule
    {
        public override Type ParamType => typeof(Vector2);
 
        protected override Vector4[] GetValue()
        {
            return Components.Select(c => TweenValue.Vector2ToVector4(c.anchoredPosition))
                .ToArray();
        }
 
        protected override void SetValue(TweenValue[] values)
        {
            for (var i = 0; i < values.Length; i++)
                Components[i].anchoredPosition = values[i].GetVector2();
        }
    }