【忙しい人のためのUnity入門講座】グローバル変数とローカル変数の違いと「Serializefield」を使ったインスペクターへの表示

投稿者: | 2018年11月22日

フィア
今回は「グローバル変数」と「ローカル変数」についてだよ
カレン
「Serializefield」を使ったInspectorへの表示も紹介してあるわ
カレン
ちなみに、「Serializefield」は意外と入門書に載ってないから

入門者は要チェックね

 

目次

 

― YouTubeなら2分43秒で学べます ―

 いいね    チャンネル登録

 

スポンサーリンク

 

 

ローカル変数について

ローカル変数は「メソッド内で定義された変数」のことで、そのメソッド内でしか使うことができません

 

 

グローバル変数について

グローバル変数では、そのクラス内であれば、どのメソッドからでも参照できます

基本的な法則として、変数は { } で囲った中であれば共通して利用することができます

例えば、ローカル変数はメソッド内での定義なので、メソッド内でしか使えませんが、グローバル変数はクラス内での定義ですので、クラス内のメソッド全てに適用できます。

 

 

グローバル変数とローカル変数の優先度と「this」の使い方

ローカル変数とグローバル変数が同じ名前だった場合、ローカル変数が優先されます

同名のローカル変数とグローバル変数が混在している場合、「this.変数名」を付けてあげると、このクラスの変数、つまり、「グローバル変数」が優先されます

 

 

別クラスからpublic変数を参照する方法

別クラスからの参照を可能にする場合は、「public 型名 変数名」のように宣言してください。メソッド名の頭についていたpublicの正体はこれです。

別クラスから参照する方法は、「クラス名 変数名 = new クラス名()」のようにインスタンス化した後、「変数名 . 変数」のように呼び出します。

 

 

インスペクター上からpublic変数を上書きする方法

public変数はインスペクター上で書き換えることができます。しかも、Unityではインスペクター上の数字が優先されます。

例えば、「public int a = 1000」とグローバル変数で宣言しても、インスペクター上で「0」と上書きすると、「a = 0」となります

なので、void Start()メソッドなどで「a = 100」ともう一度上書きする必要があります。

こういった理由から、勝手に書き換えられたくない場合はインスペクター上に表示しないようにしましょう。

 

インスペクター上の値を変更していないとき

 

インスペクター上の値を変更したとき

 

 

別クラスからのアクセスを禁止するprivate変数

別クラスからの参照を禁止するには「private 型名 変数名」のように宣言してください。

「型名 変数名」のように宣言した場合も、private変数の扱いになります。

public変数の場合、別クラスから変数を自由に書き換えることができるので、キャラの攻撃力を-100のようにするなど、ありえない数字を代入される恐れがあります。

また、private変数はインスペクターに表示されないので、エディタ上からの変更もされなくなります。

そういった理由から、変更されたくない値はprivate変数として宣言してください。

 

 

「Serializefield」を使ってprivate変数をインスペクターに表示する方法

private変数をインスペクター上から確認したいときは「 [Serialisefield] private クラス名 変数名」のように宣言してください。

private は無くてもエラーにはなりません。

これは、別クラスからの参照はして欲しくないが、実行中にどのような値が代入されているのかを目視したいときに使います。

public変数と同様、インスペクター上で値を変更すると、値が上書きされてしまうので注意が必要です。

 

 

終わりに

フィア
案外説明すると長い内容になったね
カレン
忙しい人は、動画で復習してね

 

 

関連記事

ローカル変数の型名の宣言が楽になります。

 

外部オブジェクトに取り付けたクラスの変数を参照する方法です。

 

忙しい人のためのUnity入門講座へ戻る

 

すくまりゲームズの人気記事