Unityを学ぶためのC#の基本文法の学習

初投稿となります。
Unityを学ぶ際のアウトプットの場としてこちらを活用していきたいと思います。
今回はUnity上でのデータの扱い方について学んでいきます。
# 変数

変数とはデータの入れ物のこと。
変数は中に入れる値によって様々な方が用意されており、変数を作る際にはまず「どの型の変数なのか」を宣言する。
また、変数には型と一致する値のみを入れることができるため型と不一致の値を入れてしまうとエラーが起こってしまう。
特殊な場合を除いて中身の値をいつでも変更できる。
基本的に「変数の型　変数名」の順に命名する。


①bool型
```unity:bool型
bool value = true;
```

bool型はtrue(真)またはfalse(偽)の2種類の値を格納できる。


②int型
```unity:int型
int value = 128;
```

int型は、-2147483648 ~ 2147483648の範囲の整数を格納できる。
この値を超える際は**long型**を使う


③float型
```unity:float型
float value = 0.25f;               //末尾にfをつける
float value2 = 5f;                 //小数点以下がなくても利用できる
```

float型は小数の格納ができる。
数値の末尾にfをつけることでfloat型であることを表し、※必ずしも小数点以下がなければならないわけではない。
また、誤差がなく扱える有効桁数は6~9桁ほど。これを超えてしまうと誤差が生じてしまう。
※メモリ使用量が少なく演算も高速になるため整数のみを利用するとわかっている場合はint型を使った方がいい。


④string型
```unity:string型
string value = "ABCあいう123";
```

キャラクターの名前やメッセージなどの任意の文字列を格納できる。
文字列を「""」で囲う。


⑤配列型
```unity:配列型
int[] value = new int[] {1,2,3};     //「1,2,3」という3つのint型データが入った配列を作成する。
Debug.Log(values.Length);            //配列の要素が何個あるのかをカウントする。
Debug.Log(values[0]);                //0番目の要素(1)を取得する
values[0] = 100;                     //0番目の要素(1)を100に置き換える
Debug.Log(values[0]);                //再度0番目の要素(100)を取得する
```

配列型は同じ型の複数の値を一つの固まりとして扱うための型。
要素は「0」から順に番号(インデックス)がふられ、これを使って値の変更やデータの読み取りを行う。


⑥List型
```unity:List型
List<int> values = new List<int> {1,2,3};     //「1,2,3」という3つのint型データが入ったListを作成する。
Debug.Log(values.Count);                      //Listの要素が何個あるのかをカウントする。
Debug.Log(values[0]);                         //0番目の要素(1)を取得する
values[0] = 100;                              //0番目の要素(1)を100に置き換える
Debug.Log(values[0]);                         //再度0番目の要素(100)を取得する
values.Add(999);                              //要素999を末尾に追加する
Debug.Log(values[values.Count - 1]);          //999が出力される
```

List型は基本は配列型と似ているが、要素を後から追加することができる


⑦Dictionary型
```unity:Dictionary型
Dictionary<string,int> value = new Dictionary<string, int>{
    {"いち", 1},
    {"に", 2},
    {"さん",3 },
};                                                 //いち　= 1, に = 2, さん = 3という3つのデータが入ったDictionaryを作成する。
Debug.Log(values.Count);                           //Dictionaryの要素が何個あるのかをカウントする。
values["いち"] = 100;                               //"いち"の要素を100に置き換える
Debug.Log(values["いち"]);                          //"いち"の要素(100)を取得する
values.Add("よん",999);                             //要素"よん" = 999を追加する
Debug.Log(values["よん"]);                          //999が出力される
```
表記はList型と似ているが、自動で割り振られるインデックスの代わりに「キー」と「値」をセットにしてデータを保持する。


⑧列挙型(Enum)
```unity:列挙型(Enum)
enum Gamemode {
    Easy,
    Normal,
    Difficult
}
Gamemode gamemode = Gamemode.Easy                   //GameMode型の変数には、先に宣言していたGamemode.Easy　Gamemode.Normal Gamemode.Difficultの3種類しか入れることができない。
```

列挙型はあたいの種類を先に宣言する型。
列挙型の変数GameModeに「Easy」,「Normal」,「Difficult」の３種類を宣言するとGameModeにはこの値しか入れられない。

⑨推論型(var)
```unity:推論型(var)
var a = 1;                       //int型になる
var b = 1.3f;                    //float型になる
var c = "test";                  //string型になる
var d;
var e = null;
```

varで変数を宣言することで初期値に応じて自動的に型が割り振られる。
また、下の二行のように初期値が空の場合はvarを使用できない。



# 定数

一度確定すると値を変更することができない値。
変更しない値を明確にすることができるのでプログラムの見通しが良くなる。

```unity:定数
const int Value = 10;
```

constをつけることで定数として値を使える。



# ベクトル型

ベクトルとは向きとその向きに対する大きさを表す値。
Vector3では3D空間の3軸(X,Y,Z)の値を格納でき、Vector2では2D空間の3軸(X,Y)の値を格納できる。

```unity:ベクトル型
private void Start() {
    var position = new Vector3(0, 1, 2);       
    transform.position = position;                              //指定した座標にオブジェクトを配置する
    Debug.Log(position.normarized);                             //方向だけを表すベクトルを取得する
    Debug.Log(position.magnitude);                              //大きさだけを取得する

    Debug.Log(new Vector3(3, 1, 0) + new Vector3(5, 3, 1));     //Vector同士での加減算が可能->数値は(5, 4 , 1)となる
    Debug.Log(new Vector3(3, 1, 0) * 2 / 5);                    //intやfloatとの加減算も可能->数値は(1.2, 0.4, 0)となる

    Debug.Log(Vector3.zero);                                    //　new Vector(0, 0, 0)と同値
    Debug.Log(Vector3.up);                                      // new Vector(0, 1, 0)と同値
    Debug.Log(Vector3.forward);                                 // new Vector(0, 0, 1)と同値
}
```

数値は横、縦、奥行きの順で表記をする。
主な処理の内容は**オブジェクトに対して、任意の方向に力を加える**処理をする場合と、**オブジェクトを配置する座標を指定する**際に利用される。



# まとめ
2度目になりますが、今回が初投稿となります。
今後の学習にもこちらを利用させていただきます。
主に、Unityの学習を進めていこうと思うので今後ともよろしくお願いします。