インスペクターに変数を表示させる方法

ここではC#スクリプトの変数(フィールド)の値を、Unityエディタのインスペクターに表示してそこから変更できるようにする方法について説明します。


※この記事で使用しているUnityのバージョン:Unity2019.1

インスペクターに変数を表示させる方法

まず今回やりたいことは、もう少し詳しく言うと「C#スクリプトに書いた変数をインスペクターに表示させて、スクリプトをいじらなくてもインスペクターから直接変数の値を変更できるようにする」ということです。これを実現する方法は次の2つがあります。

  1. publicな変数にする
  2. 変数の前に属性[SerializeField]をつける

publicな変数にする

まず一つ目は変数をpublicな変数(グローバル変数)にする方法です。グローバル変数の場合、特に何もしなくてもインスペクターに表示されます。

なお、グローバル変数でもインスペクターに表示させたくない場合がたまにあります。そのときは変数の前に[System.Nonserialized]という属性つけるとインスペクターには表示されなくなります。

変数の前に[SerializeField]をつける

次は変数の前に[SerializeField]という属性をつける方法です。1つめの方法だと別のクラスから変数の値を変更できるようになってしまうので、こちらの方法はprivateな変数(ローカル変数)をインスペクターに表示したいときによく使います。

実際のC#スクリプトとインスペクターでの表示

では実際にC#スクリプトを書いて、インスペクターでの表示がどうなるかを確認してみましょう。今回は下のようなスクリプトを書きました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{

  public string serializedText1 = "これはシリアライズされる文字列です。";

  [SerializeField]
  string serializedText2 = "これもシリアライズされる文字列です。";

  [System.NonSerialized]
  public string nonSerializedText = "これはシリアライズされない文字列です。";

}

インスペクターでの表示は次のようになりました。

インスペクターに表示された変数

先ほど説明した通りの結果になったことが分かります。