赤兎ラボ

コーディングからバージョン管理、業務効率化までをまとめます。

値が変化したときに処理を実行する

今回の記事では値が変化した時に行ってほしい処理の実装方法について触れます。コールバックを使います。

Unityのコールバックについて

Unityには標準でコールバックがいくつか用意されています。 UI/Buttonを作成すればOnClickというコールバックが見つかるでしょう。

f:id:RedRabbitNet:20190611072931p:plain

コールバックを自作するには

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によってインスペクタに表示することにしています。ここで別のオブジェクトから呼び出す関数を指定できます。

f:id:RedRabbitNet:20190611074242p:plain

あとはStatusChange()が呼ばれた際にcallabck.Invoke()によってコールバックの呼び出しが行われます。
これでステータス変化時の処理が書けるようになりました!