【Unity】enum(列挙型)のキャストが面倒

Unity/C#

環境

  • OS:Windows 10 Pro
  • Unity:2021.3.18f1

現象

enum(列挙型)は条件分岐においてとても便利でよく使用しますが、使用する場合に(int)を使用していちいちキャストするのが面倒です。

public class MenuManager : MonoBehaviour {
    enum CONTROL {
        host,
        guest
    }
    public void MenuButtonRun(int num) {
        switch (num) {
            case (int)CONTROL.host:
                GameController.battleMode = (int)CONTROL.host;
                nextScene.NextSceneRun(2);
                break;
            case (int)CONTROL.guest:
                GameController.battleMode = (int)CONTROL.guest;
                nextScene.NextSceneRun(2);
                break;
        }
    }
}

解決策

もしかしたら他にいい方法があるかもしれませんが、enumをあきらめてconstで代用しています。「MyConst」という名前で新しくC#スクリプトを作成します。

namespace MyConst {
    public class MyConstManager {
        public ConstControl control = new ConstControl();
        public ConstBattleMode battleMode = new ConstBattleMode();

        public class ConstControl {
            public const int host = 0;
            public const int guest = 1;
        }

        public class ConstBattleMode {
            public const int pve = 0;
            public const int pvp = 1;
        }
    }
}

使用したいスクリプトのusingで、上で作成した「MyConst」の名前空間を指定します。これで共有する定数を、キャストの記述することなく使用することができます。

using UnityEngine;
using MyConst;

public class MenuManager : MonoBehaviour {
    public void MenuButtonRun(int num) {
        switch (num) {
            case MyConstManager.ConstBattleMode.pve:
                GameController.battleMode = MyConstManager.ConstBattleMode.pve;
                nextScene.NextSceneRun(2);
                break;
            case MyConstManager.ConstBattleMode.pvp:
                GameController.battleMode = MyConstManager.ConstBattleMode.pvp;
                nextScene.NextSceneRun(2);
                break;
        }
    }
}

もっと他にいい方法がありそうですが、お困りの方は試してみてください。

コメント

タイトルとURLをコピーしました