Particle System のように要素を選択して、機能を追加できるライブラリを公開しました
使い方
ModuleControlAbstract
を継承したクラスを作成する
こちらが MonoBehaviour
を継承しているクラス
using System; public class SampleModuleControl : ModuleControlAbstract { private void Awake() { // SetUpを呼び出すことで各Module のSetUpを呼ぶ SetUp(); } // Module として使うベースクラスを指定する public override Type PartsType() { return typeof(SampleModuleAbstract); } }
Module を作成する
Module のベースクラスとなる ModuleAbstract
を継承したクラスを作成する
public abstract class SampleModuleAbstract : ModuleAbstract { protected SampleModuleControl Owner => GetController<SampleModuleControl>(); }
先程作成したクラスを継承して機能を実装する
using UnityEngine; public class SampleModuleMoveX : SampleModuleAbstract { [SerializeField] private int _value; private float _defaultX; private bool _isPong; protected override void OnSetUp() { _defaultX = Owner.transform.localPosition.x; } protected override void OnUpdate() { var pos = Owner.transform.localPosition; if (_isPong) { pos.x -= Time.deltaTime; if (pos.x < _defaultX - _value) _isPong = !_isPong; } else { pos.x += Time.deltaTime; if (pos.x > _defaultX + _value) _isPong = !_isPong; } Owner.transform.localPosition = pos; } }
using UnityEngine; public class SampleModuleMoveY : SampleModuleAbstract { [SerializeField] private int _value; private float _defaultY; private bool _isPong; protected override void OnSetUp() { _defaultY = Owner.transform.localPosition.y; } protected override void OnUpdate() { var pos = Owner.transform.localPosition; if (_isPong) { pos.y -= Time.deltaTime; if (pos.y < _defaultY - _value) _isPong = !_isPong; } else { pos.y += Time.deltaTime; if (pos.y > _defaultY + _value) _isPong = !_isPong; } Owner.transform.localPosition = pos; } }
これで SampleModuleAbstract
を継承しているクラスが Inspector上に表示される
チェックボックスをクリックすることでその機能が有効になる
今回ではX移動のみにチェックが入っているのでX座標のみ移動を行うオブジェクトになる
実際にはコンポーネントがついているが、HideFlagによってInspector上では非表示にすることで
擬似的にモジュールとして機能させている