値が変化したときに処理を実行する
今回の記事では値が変化した時に行ってほしい処理の実装方法について触れます。コールバックを使います。
Unityのコールバックについて
Unityには標準でコールバックがいくつか用意されています。 UI/Buttonを作成すればOnClickというコールバックが見つかるでしょう。
コールバックを自作するには
Unityからコールバック用のクラスが提供されています。UnityEventを使いましょう。 以下のソースコードをオブジェクトにアタッチすることで同じような機能が実装出来ます。
using UnityEngine.Events;
public class Status : MonoBehaviour {
[SerializeField] private UnityEvent callback;
void Start () {}
void Update () {}
private void StatusChange(int changeValue)
{
hp -= changeValue;
callback.Invoke();
}
}
今回は触れませんが、C#ではSystem.Actionやデリゲート等のコールバックが提供されています。興味がある方は調べてみても良いでしょう。
解説
SerializeFieldによってインスペクタに表示することにしています。ここで別のオブジェクトから呼び出す関数を指定できます。
あとはStatusChange()が呼ばれた際にcallabck.Invoke()によってコールバックの呼び出しが行われます。
これでステータス変化時の処理が書けるようになりました!