ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - Inspector にプルダウンを表示させる

初めに

 本記事では、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以外のジョブは省略. つくらないと他のジョブを選択した場合はエラーが起きます.

(実行結果)

 このコードでは、継承やポリモーフィズム、抽象クラスなどの知識を用いています。興味がありましたら、下の記事をご覧ください。

fineworks-fine.hatenablog.com
fineworks-fine.hatenablog.com

参考

corevale.com

最後に

  • Inspector にプルダウンを表示させるには、enum を使う