Unity - Inspector にプルダウンを表示させる
Inspector にプルダウンを表示させる
使う場面
キャラクター名やジョブなどを string で取得する場面がありました。
しかし、このやり方では誤字があった場合、適切に動作しません。アルファベットを使う場合は大文字なのか小文字なのかまで一致している必要があるため、やはり手入力をさせることは避けるべきです。
そこで、先ほどの画像のようにプルダウンで選択できるようにしておくと、エラーを回避することができます。
Inspector にプルダウンを表示させる方法
Inspector にプルダウンを表示させるには、enum(列挙型)を使います。
列挙型の値を格納する変数を public など Inspector に表示される形で定義すれば、プルダウンを表示させることができます。
(サンプル)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { [Header("ジョブを選択してください")] public JobList job; //列挙型の値を格納する変数 } //列挙型の定義 public enum JobList { Soldier, Shielder, Archer, Berserker }
enum の説明はこちらの記事をご覧ください。
fineworks-fine.hatenablog.com
応用例
今回学んだ Inspector にプルダウンを表示させる方法を用いて、実際に使えそうなコードを一つ作ってみます。
今回は、次のような設定でコードを作りました。
- ジョブのクラスがあり、その派生として Soldier や Shielder など各ジョブのクラスを作る
- プルダウンで選択したジョブのクラスのインスタンスを取得する
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { [Header("ジョブを選択してください")] public JobList job; //列挙型の値を格納する変数 void Start() { Debug.Log($"Job番号{(int)job}:{job.ToString()}"); Job myJob = null; //プルダウンで選択したジョブが Soldier ならば、Soldier のクラスのインスタンスを取得 if (job == JobList.Soldier) { myJob = new Soldier(); } Debug.Log(myJob.JobName + "です"); } } //列挙型でジョブのリストを定義 public enum JobList { Soldier, Shielder, Archer, Berserker } //ジョブのクラスの定義 public abstract class Job { string jobname; public abstract string JobName { get; } public Job() { } } //ジョブの派生クラスとして、各ジョブの定義をする //各ジョブ事の設定はここでする public class Soldier : Job { public Soldier() { } public override string JobName { get { return "Soldier"; } } } //Soldier以外のジョブは省略. つくらないと他のジョブを選択した場合はエラーが起きます.
(実行結果)
このコードでは、継承やポリモーフィズム、抽象クラスなどの知識を用いています。興味がありましたら、下の記事をご覧ください。
参考
最後に
- Inspector にプルダウンを表示させるには、enum を使う