ぺんたんがゲーム開発やアプリ開発、最近の気になる話題、特にスマホやIT関連について語る場所

ぺんごや

Unity初心者 Unity基礎

【Unity】インスペクターで見せない変数、見せる変数まとめ

投稿日:

Unityでグローバル変数を宣言するとインスペクターで見えたり見えなかったり、他のスクリプトから見えたり見えなかったりと色々です。
理想としてはやはり必要最低限の部分で見えるのがいいですよね。

あれ、こういうときはどうしたらよかったっけ?と忘れてしまうこともあるのでまとめてみました。

変数の見え方パターン

スクリプト内だけで見える変数

これはシンプルにprivate、もしくはアクセス修飾子なしで宣言すればOK
アクセス修飾子を省略した場合、C#ではprivate扱いとなります。

private int testPrivateA;
int testPrivateB;

インスペクター、及びすべてのスクリプトから見える変数

インスペクター上に表示しつつ、他のすべてのスクリプトからも見えるようにする方法。これもシンプルにpublicを付けてあげればOKです。

public int testPublic;

インスペクターに表示はしつつ、スクリプト内だけで見えるようにする変数

privateにして他のスクリプトからは見せたくない。だけどインスペクターには表示させたい。
そういった場合は[SerializeField]を付けたPrivateで宣言すればOK。こちらのPrivateも省略可能です。

[SerializeField] private int testInspecter_PrivateA;
[SerializeField] int testInspecter_PrivateB;

インスペクターには表示したくないけど、他のスクリプトから見えるようにしたい

そんなワガママな要望にもUnityは対応しています。
主な手法としては3つ。

  • [System.NonSerialized]を付ける
  • [HideInInspector] を付ける
  • プロパティ化する

[System.NonSerialized] public int testNoInspector_PublicA;
[HideInInspector] public int testNoInsceptor_PublicB;
public int testProperty { get; set; }

それぞれの方法について少し補足をします。

[System.NonSerialized]を付ける方法

この方法は、Publicだけどシリアライズ化しない…インスペクターに表示しないよっていう意味となります。

[HideInInspector] を付ける方法

シリアライズ化はするけどインスペクターから非表示にします。あくまで見えなくするだけです。
ですので今回の目的では[System.NonSerialized]を使用するのがいいです。

プロパティ化する方法

これが最もスマートなやり方。他のスクリプトから参照するときも通常の変数と同じように “TestScript.testProperty = 1;” のように書けます。
また、以下のように書くことで他のスクリプトから参照のみ…読み取り専用とすることもできます。

public int testProperty2 { get; }

スポンサードサーチ

Private、Publicそれぞれ宣言方法と見え方まとめ

//スクリプト内だけで参照可能
private int testPrivateA;
int testPrivateB;

//インスペクター、すべてのスクリプトから参照可能
public int testPublic;

//インスペクターに表示するけど、他スクリプトから参照させない
[SerializeField] private int testInspector_PrivateA;
[SerializeField] int testInspector_PrivateB;

//インスペクターに表示しないけど、他のスクリプトから参照可能
[System.NonSerialized] public int testNoInspector_PublicA;
[HideInInspector] public int testNoInsceptor_PublicB;
public int testProperty { get; set; }
public int testProperty2 { get; }       //読み取り専用

インスペクターでの見え方

他のスクリプトからの見え方

[System.NonSerialized]ええやん!って最初は思っていましたが、多少面倒でもプロパティを使うのがスマートだし融通も効くしでよさそう。とはいえそれぞれ特徴があるので臨機応変に使っていきましょうー。

-Unity初心者, Unity基礎

Copyright© ぺんごや , 2019 All Rights Reserved Powered by STINGER.