[超初心者向け]UnityでのC#の基礎(1)基本の型float,string,bool,byte

Unityは「ゲームを簡単に作れるようにする」ソフトですが、他のプログラミング経験がないままで利用するとScriptが分からなくてつまずいてしまいます。ここでは、Unityで利用するC#に絞って、Scriptの仕組みを解説します。
Scriptのエディタで出てくる簡単な解説は以下で記していますので、一度読んでからこちらを参考にして下さい。

[[超初心者向け]やっと納得、Unityを初めて触ると出てくるC#の何だあれの答え](http://qiita.com/JunShimura/items/3c2e23bb77cc9085bfda)

この記事は以下でシリーズしていますので、適宜、参照してください。
[UnityでのC#の基礎]
(http://qiita.com/JunShimura/items/f87c599b3738b804f605#unity%E3%81%A7%E3%81%AEc%E3%81%AE%E5%9F%BA%E7%A4%8E)

これだけでは「なんとなく分かる」程度なので、制作するには更に知識が必要です。

#C#はMicrosoft&reg;が定義しているもの
C#は元来、Unity用に開発された言語では無く、Microsoft&reg;社が開発し公開しています。

[Microsoft社のC# リファレンス
https://msdn.microsoft.com/ja-jp/library/618ayhy6.aspx](https://msdn.microsoft.com/ja-jp/library/618ayhy6.aspx)

ISOやJISなどの公的機関の規格として公開されており、それを利用しUnityではプログラミングしています。C#に規定してあるものは、そのままUnityで使えます。更に、独自に拡張してUnityでは実装しています。ここではUnityで実装している部分を利用することを念頭に入れて解説します。C#が本来、規定している機能をくわしく知りたい場合は、上記Microsoft社の解説を参照してください。

#内部では数値
Unityに限らず、コンピュータのソフトウエアは、内部では全て数値の演算でものごとを表現しています。端的に分かりやすい物体の座標や速度以外に、色や音も全て、数値です。それを演算して、それぞれ出力する時にプレイヤーへ別の形で表現されます。数値は2進数の有限な桁数(__ビット数__）での表現になります。そのため、以下を心得る必要があります。

* 表せる数の範囲があらかじめ決まっている
* 演算結果が範囲を超えた場合、どうなるに注意が必要
* 代入するときに同じ型になっていないと、エラーになるか変換処理が勝手に入る

電卓の計算が桁数に限界があるのと同じで、無限大に近い数や極小な数、無限小数などに注意をはらいがら制作します。

#<i class="fa fa-cubes"></i>Unityでよく使われている型
Unityのリファレンスで見られる基本の型は、数種類に限られます。

* [小数を表わす`float`](#小数を表わすfloat)
* [文字列を表わす`String`](#文字列を表わすString)
* [真偽を表わす`bool`](#真偽を表わすbool)
* [整数を表わす`byte`](#整数を表わすbyte)

それぞれを解説します。

##<i class="fa fa-cube"></i>小数を表わす`float`

UnityのScriptリファレンスで、よく用いられる３次元座標を持つVector3型の中にあるXを見てみます。

[Vector3.x Unity - Scripting API:
http://docs.unity3d.com/ja/current/ScriptReference/Vector3-x.html]
(http://docs.unity3d.com/ja/current/ScriptReference/Vector3-x.html)

こう、記されて言います。


```csharp
public float x;
```
この`float`が型を示しています。Unityのリファレンスでこれが指定されていたら、小数を含む数値です。

|型|ビット数|最小値|最大値|
|:----|---:|:---:|:------:|
|`float`|32|$$-3.4 × 10^{38}$$ |$$+3.4 × 10^{38}$$|

詳しくは以下に書いてあります。
[float (C# リファレンス)
https://msdn.microsoft.com/ja-jp/library/b1e65aza.aspx]
(https://msdn.microsoft.com/ja-jp/library/b1e65aza.aspx)

C#リファレンスでは他にも出てきますが、Unityのリファレンスで数値を表わすものはほぼ、これだけです。座標や力などを組み合わせて数式で計算するときに、同じ型で揃えてあると表現できる範囲が変わらないので、代入する時の誤差などを複雑に考慮する必要が無いからです。

ただし、プログラミングで数式を書くと、演算はもっと大きな型で処理されることがあります。

```csharp
GameObject objectHoge;
float hogeX=objectHoge.transform.localPosition.x;

```


##<i class="fa fa-cube"></i>文字列を表わす`String`

UnityのScriptリファレンスで、よく用いられる`GameObject`型の中にある`tag`を見てみます。

[GameObject.tag Unity - Scripting API:
http://docs.unity3d.com/ja/current/ScriptReference/GameObject-tag.html]
(http://docs.unity3d.com/ja/current/ScriptReference/GameObject-tag.html)

こう、記されて言います。

```csharp
public string tag;
```
この`string`が型を示しています。Unityのリファレンスでこれが指定されていたら、文字列です。

|型|ビット数|内容|
|:----:|:---:|:---|
|`string`|可変|テキストを一連の Unicode 文字として表現|

詳しくは以下に書いてあります。
[String クラス
https://msdn.microsoft.com/ja-jp/library/system.string.aspx]
(https://msdn.microsoft.com/ja-jp/library/system.string.aspx)

上記は`String`（先頭が大文字)ですが、Unityで用いている`string`(全て小文字)は、.netの`System.String`と見なされ処理されています（エイリアス)。

例)

```csharp
GameObject objectHoge;
string hogeName=objectHoge.name;
```

##<i class="fa fa-cube"></i>真偽を表わす`bool`

UnityのScriptリファレンスで、よく用いられる`Collider`型の中にある`isTrigger`を見てみます。

[Collider.isTrigger Unity - Scripting API:
http://docs.unity3d.com/ja/current/ScriptReference/Collider-isTrigger.html]
(http://docs.unity3d.com/ja/current/ScriptReference/Collider-isTrigger.html)

こう、記されて言います。

```csharp
public bool isTrigger;
```
この`bool`が型を示しています。Unityのリファレンスでこれが指定されていたら、真偽の何れかを指定する型です。

|型|ビット数|内容|
|:----:|:---:|:---|
|`bool`|8|真のとき`true`、偽のとき`false`|

詳しくは以下に書いてあります。
[Boolean 構造体
https://msdn.microsoft.com/ja-jp/library/system.boolean.aspx]
(https://msdn.microsoft.com/ja-jp/library/system.boolean.aspx)

上記は`Boolean`ですが、Unityで用いている`bool`は、.netの`System.Boolean`と見なされ処理されています（エイリアス)。

例)

```csharp
public GameObject objectHoge;

objectHoge.isTrigger=true;

if(objectHoge.isTrigger)
{
  //isTriggerがtrueのとき
}

```

##<i class="fa fa-cube"></i>整数を表わす`byte`

UnityのScriptリファレンスで、よく用いられる色座標`Color32`型の中にある`b`を見てみます。

[Color32.b Unity - Scripting API:
http://docs.unity3d.com/ja/current/ScriptReference/Color32-b.html]
(http://docs.unity3d.com/ja/current/ScriptReference/Color32-b.html)

こう、記されて言います。


```csharp
public byte b;
```
この`byte`が型を示しています。Unityのリファレンスでこれが指定されていたら、整数です。

|型|ビット数|最小値|最大値|
|:----|---:|:---:|:------:|
|`byte`|8|0 |255|

詳しくは以下に書いてあります。
[Byte 構造体 (C# リファレンス)
https://msdn.microsoft.com/ja-jp/library/system.byte(v=vs.110).aspx]
(https://msdn.microsoft.com/ja-jp/library/system.byte(v=vs.110).aspx)

整数型なので、小数点以下は格納できません、また、正数のみで負数は格納が出来ません。
ただし、プログラミングで数式を書くと、演算はもっと大きな型で処理されることがあります。

```csharp;
byte b=128;
```

#まとめ

基礎的な部分はUnityのリファレンスを追った上でMicrosoft&reg;のサイトで確認すると、根本的な情報は全て解説されていますので、先ずはそうして確認すると良いでしょう。他にも当方と含めて解説サイトは多様にありますが、Unityのバージョンに依存したり部分的な解説に留まっている場合も多いので、色々と見比べて使えるサイトを探すのが良いでしょう。書籍化されたものは有料の情報ですので的確な場合が多いですが、いつのUnityに向けられて制作されたかを見落とすと、現状に合わない場合もあります。

---
この記事は以下でシリーズしていますので、適宜、参照してください。
[UnityでのC#の基礎]
(http://qiita.com/JunShimura/items/f87c599b3738b804f605#unity%E3%81%A7%E3%81%AEc%E3%81%AE%E5%9F%BA%E7%A4%8E)