32
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity - コールバックの記述まとめ

Last updated at Posted at 2018-05-25

種類

コールバックは「ファイルのダウンロードが完了するまで処理を止めたい」などの場合によく使われる手法です。
今回はUnityで扱えるコールバックを

  • UnityAction
  • UnityEvent
  • delegate

の3つに分けて、それぞれの記述方法をまとめました。

UnityAction

引数は持てないがシンプルにコールバックが実装できる。
挙動はSystem.Actionと同じです(たぶん)

// 追加
using UnityEngine.Events;

↑忘れずに。

void Start () {
	// 処理を実行するメソッドにコールバックを受け取りたいメソッドを渡す
	ActionMethod (ActionCallbackMethod);
	// ラムダ式UnityAction
	ActionMethod (() => {
		Debug.Log("ラムダ式UnityAction実行完了 : "+testVal);
	});
}

// 実行メソッド
private void ActionMethod (UnityAction callback) {
	// コールバック実行
	callback ();
}

// UnityActionのコールバックで呼び出されるメソッド
	public void ActionCallbackMethod () {
	Debug.Log ("UnityAction実行完了");
}

delegate

引数付きのコールバックを実装したいときはこれ。
自分で引数付きの型を作り、その型を使ってコールバック用の変数を宣言する。

delegate型の宣言をする。

// delegate型の宣言
private delegate void OnComplete (string text);

void Start () {
	// 処理を実行するメソッドにコールバックを受け取りたいメソッドを渡す
	DelegateMethod (DelegateCallbackMethod);

	// ラムダ式delegate
	DelegateMethod ((string text) => {
	    Debug.Log ("ラムダ式delegate実行完了 : " + text);
	});
}

// 実行メソッド
private void DelegateMethod (OnComplete callback) {
	// コールバック実行
	callback ("文字列だよ");
}

// delegateのコールバックで呼び出されるメソッド
public void DelegateCallbackMethod (string text) {
	Debug.Log ("delegate実行完了 : "+text);
}

UnityEvent

メソッドを複数登録できるので実行対象が多い場合に有効。
登録したメソッドを呼び出すにはInvoke()を使う。
Invoke()を使うと登録したメソッドが一斉に実行される。
Inspector上でもメソッドの登録ができるのがキモ。

// 追加
using UnityEngine.Events;

UnityEventはインスタンスの生成を忘れずに。

private UnityEvent unityEvent;

void Start () {
	// インスタンスを生成
	if (unityEvent == null)
		unityEvent = new UnityEvent ();
	// Invoke()で実行させるメソッドを登録する
	unityEvent.AddListener (UnityEventCallbackMethod_1);
	unityEvent.AddListener (UnityEventCallbackMethod_2);
	// 登録されたメソッドを一斉に実行する
	unityEvent.Invoke();
}

// Invoke時に実行されるメソッド1
private void UnityEventCallbackMethod_1 () {
	Debug.Log ("UnityEvent実行完了 その1");
}

// Invoke時に実行されるメソッド2
private void UnityEventCallbackMethod_2 () {
	Debug.Log ("UnityEvent実行完了 その2");
}

以上

GitHubに上記をまとめたプロジェクト置いておきました。
GitHub - UnityCallbackSample

32
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?