i-school - 値の代入について

変数と型のおさらい

 C#では変数を利用して、その中身(値)のやり取りを行います。もっと詳細に説明すると、値型と参照型とがありますが、ここでは解説しません。
こちらのサイト様がわかりやすいです。
未確認飛行 C# 様
https://ufcpp.net/study/csharp/oo_reference.html

 変数を利用するには宣言を行う必要があり、宣言する際には必ず「型」を指定する必要があります。

 変数には自由に名前を付けることが出来ますが、命名規則がない訳ではありません。(キャメル型、スネーク型など)
命名する際には、誰が読んでもわかりやすく、どこの処理に利用されているかをイメージできる名前を心がけましょう。

 変数のように、プログラマーが自由に名前をつけて宣言して使用できるものを識別子(しきべつし)と言います。
 自由に、とは言っても、C#にてキーワード(予約語)となっている文字列は基本的には変数名にはできません(if,int,while,this,など)
また変数名の先頭の文字は数字にはできません。

 Unityの場合、宣言できる型には、C#にて始めから使えるように用意されている「組込み型」と、Unityが始めから用意しているGameObjectやComponentなどの「Unity専用の型」があります。
また自作したクラスも「型」として宣言することが出来ます。

<1.組込み型>
int i;
string str;

 など

<2.Unityの用意している型>
GameObject obj;
Rigidbody rb;
Image img;

 など

<3.自作したクラス>
PlayerController playerController;
GameManager gameManager;

 など

代入とは

 変数を使って式を立てていく際に、イコールの演算子を使用する処理が多く使われます。これを代入と言います。
代入とは、右辺の値(変数の中身)を、左辺の変数に入れる事です。

int i = 0;
int x = 10;

i = x;
―――――――
結果: i = 10;

[左辺 = 右辺]の考え方を身につける

 上記の例のように、これが組込み型の代入の場合ですとわかりやすいのですが、Unity専用の型やクラスの代入になると、途端にわかりにくくなります。
そのため、「左辺 = 右辺」という式があった際には、「型 = 型」であると、まずは念頭に置きましょう。
そして初期から使用しているいくつかの処理を思い出してみます。

int value = Random.Range(0, 100);
 ↓
int = int であるため、代入が出来ている

BoxCollider boxCol;
boxCol = GetComponent<BoxCollider>();
 ↓
BoxCollider = BoxCollider であるため、代入が出来ている

GameManager gameManager;
gameManager = GameObject.FindGameObjectWithTag("GameManager").GetComponent<GameManager>();
 ↓
GameManager = GameObject を経由して GameManager であるため、代入が出来ている

 どちらも式だけを見るのではなくて、その式がどの型によって処理を行うようにするのかを置き換えて見るようにします。
こうすることによって、徐々にUnity専用の型やクラスであっても、代入処理の理解を深めていくことが出来ます。

 特に最後の例題はドットの位置により、処理が3つ行われています。
まずは「GameObject」までが1つの処理で、「GameObject型の持つ処理を行います」という命令です。

続いて「.FindGameObjectWithTag("GameManager")」までが2つ目の処理です。この処理は文字にすると長くなり
「GameObject型の持つ、(ドットの位置)FindGameObjectWithTagという関数を実行します。
 この関数は引数("指定した文字列")と、同じ文字列のタグを持つゲームオブジェクト1つをヒエラルキー上から探してきて取得します。
 指定する文字列は"GameManager"です。」という処理になります。

最後は「.GetComponent<GameManager>()」です。
ドットがありますので、2つ目の処理に対して行われる処理になります。
つまり「2つ目の処理で取得したGameManagerというタグを持つゲームオブジェクトの中から、GameManagerという型を1つ見つけて取得します」という命令です。

このように最後の処理まで到達することによって、無事にGameManager型が右辺の値になりますので、これが左辺のgameManagerの変数の値として代入されることになります。

 このように代入の流れの説明ができるようになってくれば、理解は深まってきていると思います。