変数をインスペクターに表示する、魔法ような、神のような構文
え?インスペクターで変数を表示できるようにしたい?分かります。めっちゃ分かります。変数って、何かと便利ですもんね。
そんな変数をインスペクターに表示させる構文をお教えしましょう。
ズバリ、public
です。
例を交えて説明します。
@publicを付けたら何かと便利な件
using System;
using System.Collections.Generic;
using UnityEngine;
public class TestScript : MonoBehaviour
{
public int Int;
public float Float;
public double Double;
public bool Bool;
public char Char;
public string String;
public List<int> list;
public int[] Array = new int[] {1, 2};
}
注意
List型変数と配列型変数(上記のスクリプトではint[]
)を使うときは、必ず
using System;
using System.Collections.Generic;
を記述しましょう。抜けていると、エラーが発生してうまく実行できません。
こんな処理を書いたとします。
これを実行してーの、表示されてーの...実行結果はこうなります。
int[]
はなぜか表示されていませんが、とにかく、実行結果はこんな感じになります。(ListはInspector上で追加しています。)
秘密は、先ほども紹介した通り、public
にあります。
このスクリプト、他のクラスにも変数を公開できるのと同時に、Inspectorにも表示されるという優れものなのです。
public
と何が違う?[SerializeField]
について
public
と似た処理の中に、[SerializeField]
というものがあります。記述方法は、public
を[SerializeField]
に変えるだけです。
この[SerializeField]
は、こんな時に使えます
・Inspector上に情報を表示したい時
・他のスクリプトに意図せずに値を渡して変更されて欲しくない時
この処理は、2人以上でプロジェクトを作成しているときに重宝します。
例えば、、、
AさんとBさんは一緒にプロジェクトを作成しています。
ただし、AさんとBさんは別々のスクリプトを担当しています。
Aさんは、Inspector上に情報を表示したいと思い、以下のような処理を書きました;public float Object_Hearth;
実は、この変数
Object_Hearth
はAさんは公開する意図はなかったのですが、Bさんは「Object_Hearth
は使えるな」と考え、担当しているスクリプトに組み込んでしまいました。
結果として、プロジェクトがおかしなことになりましたとさ。
こんな悲しい結果を防ぐためにも、[SerializeField]
は重宝するのです1。
ちなみに、Aさんは、このことを知ってこんな処理に訂正しました。
[SerializeField] private float Object_Hearth;
//privateと表記しておくことで、このオブジェクトを使ってほしくないことや、使えないことを明示できます。
まとめ
今回は、public
と[SerializeField]
について解説しました。
public
は、インスペクターに変数を表示したいときや、同時に変数を別のスクリプトで使えるようにしたいときに有効です。
[SerializeField]
は、インスペクターに変数を表示したいけど、変数を別のスクリプトで使えるようにしたくないときに有効です。
質問があればいつでもどうぞ!できる範囲でお答えします。