other
Unityでは、さまざまな方法でメソッドを実行することができます。
イベント実行方法をいくつか
1. コールバックメソッド
- 概要: 特定の条件が満たさ れたときに実行されるメソッドを設定することができます。
- 使用例: イベントや条件の判定があるクラスにコールバックメソッドを定義し、他のクラスからそのメソッドを呼び出す。
public class EventPublisher
{
public Action OnSomethingHappened;
public void DoSomething()
{
OnSomethingHappened?.Invoke();
}
}
public class EventSubscriber
{
private void Start()
{
EventPublisher publisher = FindObjectOfType<EventPublisher>();
publisher.OnSomethingHappened += HandleSomethingHappened;
}
private void HandleSomethingHappened()
{
// 何かの処理
}
}
2. Unityのコルーチン
- 概要: コルーチンを使用して、一定の時間待ったり、非同期に処理を実行することができます。
- 使用例:
StartCoroutineを使って、処理を遅延させたり、順次実行する。
public class CoroutineExample : MonoBehaviour
{
private void Start()
{
StartCoroutine(ExecuteAfterTime(2));
}
private IEnumerator ExecuteAfterTime(float time)
{
yield return new WaitForSeconds(time);
// メソッドを実行
}
}
3. Unityのイベントシステム(UIイベント)
- 概要: UnityのUIシステムを使用して、ボタンやスライダーなどのUI要素にイベントリスナーを追加することができます。
- 使用例:
ButtonのonClickイベントにメソッドを割り当てる。
public class UIButtonExample : MonoBehaviour
{
public Button myButton;
private void Start()
{
myButton.onClick.AddListener(OnButtonClick);
}
private void OnButtonClick()
{
// ボタンがクリックされたときの処理
}
}
4. カスタムイベント
- 概要: 自分自身でイベントを定義して、メソッドを実行することができます。
- 使用例: カスタムイベントを作成し、特定の条件でそのイベントを発火させる。
public class CustomEventExample : MonoBehaviour
{
public event Action MyCustomEvent;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
MyCustomEvent?.Invoke();
}
}
}
5. インターフェースを利用した実行
- 概要: インターフェースを定義し、そのインターフェースを実装したクラスのメソッドを呼び出します。
- 使用例: 共通のインターフェースを持つ複数のクラスからメソッドを呼び出すことができます。
public interface IExecutable
{
void Execute();
}
public class ExecutableClass : MonoBehaviour, IExecutable
{
public void Execute()
{
// 実行する処理
}
}
public class Executor : MonoBehaviour
{
public IExecutable target;
private void Start()
{
target.Execute(); // IExecutableを実装したクラスのメソッドを実行
}
}
6. アセットバンドルやリソースマネージャを使った動的実行
- 概要: アセットバンドルやリソースマネージャを使って、動的にオブジェクトをロードし、そのオブジェクトのメソッドを実行します。
- 使用例: アセットバンドルからPrefabをロードし、そのPrefabのコンポーネントにあるメソッドを実行します。
7. 状態管理を用いた実行
- 概要: 状態パターンを利用して、現在の状態に応じたメソッドを実行します。
- 使用例: 状態に基づいて異なる処理を行う。
public interface IState
{
void Execute();
}
public class IdleState : IState
{
public void Execute()
{
// Idle処理
}
}
public class RunningState : IState
{
public void Execute()
{
// Running処理
}
}
public class Character : MonoBehaviour
{
private IState currentState;
private void Update()
{
currentState.Execute();
}
}