はじめに
Unityでプログラムをしていて、このようになるケースは多々あるのではないでしょうか?
using UnityEngine; public class Hoge : MonoBehaviour { public void Fuga(int number) { switch (number) { case 0: func0(); break; case 1: func1(); break; case 2: func2(); break; case 3: func3(); break; } } private void func0() { Debug.Log("func0"); } private void func1() { Debug.Log("func1"); } private void func2() { Debug.Log("func2"); } private void func3() { Debug.Log("func3"); } }
こうなってしまう対策をUnityの公式が紹介してくださっていました。
https://www.youtube.com/watch?v=HwD7npYb9_k
この画像のようにdelegateを用いて実現してみたいと思います!
そもそもdelegateって?
delegateは関数を入れられる変数と表現される事が多いようです。
先人の方々が分かりやすく説明をしてくれているのでそちらを参照してみてください。
デリゲート(Delegate)やイベント(Event)とは【C#】 - (:3[kanのメモ帳]
[C#] デリゲート(delegate)とはなんぞや – gomokulog
実際に試してみる
今回はActionデリゲートを用いて実現していきます。
最初にコードをこのように書き換えてみました。
using UnityEngine; using System; //これを忘れずに書く public class Hoge : MonoBehaviour { private Action[] _action; private void Start() { _action = new Action[4] { func0, func1, func2, func3 }; } private void Fuga(int number) { _action[number](); } private void func0() { Debug.Log("func0"); } private void func1() { Debug.Log("func1"); } private void func2() { Debug.Log("func2"); } private void func3() { Debug.Log("func3"); } }
これでかなりスッキリしたのではないのでしょうか。
さいごに
今回はここまで!