環境
- 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;
}
}
}
もっと他にいい方法がありそうですが、お困りの方は試してみてください。
コメント