Unityは「ゲームを簡単に作れるようにする」ソフトですが、他のプログラミング経験がないままで利用するとScriptが分からなくてつまずいてしまいます。ここでは、Unityで利用するC#に絞って、Scriptの仕組みを解説します。
Scriptのエディタで出てくる簡単な解説は以下で記していますので、一度読んでからこちらを参考にして下さい。
[超初心者向け]やっと納得、Unityを初めて触ると出てくるC#の何だあれの答え
この記事は以下でシリーズしていますので、適宜、参照してください。
[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®が定義しているもの
C#は元来、Unity用に開発された言語では無く、Microsoft®社が開発し公開しています。
Microsoft社のC# リファレンス
https://msdn.microsoft.com/ja-jp/library/618ayhy6.aspx
ISOやJISなどの公的機関の規格として公開されており、それを利用しUnityではプログラミングしています。C#に規定してあるものは、そのままUnityで使えます。更に、独自に拡張してUnityでは実装しています。ここではUnityで実装している部分を利用することを念頭に入れて解説します。C#が本来、規定している機能をくわしく知りたい場合は、上記Microsoft社の解説を参照してください。
#内部では数値
Unityに限らず、コンピュータのソフトウエアは、内部では全て数値の演算でものごとを表現しています。端的に分かりやすい物体の座標や速度以外に、色や音も全て、数値です。それを演算して、それぞれ出力する時にプレイヤーへ別の形で表現されます。数値は2進数の有限な桁数(ビット数)での表現になります。そのため、以下を心得る必要があります。
- 表せる数の範囲があらかじめ決まっている
- 演算結果が範囲を超えた場合、どうなるに注意が必要
- 代入するときに同じ型になっていないと、エラーになるか変換処理が勝手に入る
電卓の計算が桁数に限界があるのと同じで、無限大に近い数や極小な数、無限小数などに注意をはらいがら制作します。
#Unityでよく使われている型
Unityのリファレンスで見られる基本の型は、数種類に限られます。
それぞれを解説します。
##小数を表わすfloat
UnityのScriptリファレンスで、よく用いられる3次元座標を持つ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)
こう、記されて言います。
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のリファレンスで数値を表わすものはほぼ、これだけです。座標や力などを組み合わせて数式で計算するときに、同じ型で揃えてあると表現できる範囲が変わらないので、代入する時の誤差などを複雑に考慮する必要が無いからです。
ただし、プログラミングで数式を書くと、演算はもっと大きな型で処理されることがあります。
GameObject objectHoge;
float hogeX=objectHoge.transform.localPosition.x;
##文字列を表わす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)
こう、記されて言います。
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
と見なされ処理されています(エイリアス)。
例)
GameObject objectHoge;
string hogeName=objectHoge.name;
##真偽を表わす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)
こう、記されて言います。
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
と見なされ処理されています(エイリアス)。
例)
public GameObject objectHoge;
objectHoge.isTrigger=true;
if(objectHoge.isTrigger)
{
//isTriggerがtrueのとき
}
##整数を表わす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)
こう、記されて言います。
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)
整数型なので、小数点以下は格納できません、また、正数のみで負数は格納が出来ません。
ただし、プログラミングで数式を書くと、演算はもっと大きな型で処理されることがあります。
byte b=128;
#まとめ
基礎的な部分はUnityのリファレンスを追った上でMicrosoft®のサイトで確認すると、根本的な情報は全て解説されていますので、先ずはそうして確認すると良いでしょう。他にも当方と含めて解説サイトは多様にありますが、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)