Nanashi-softプログラマ専用Unityでゲーム開発


◇Unityでゲーム開発 -JavaScriptの基本-

基本的な所は JavaScriptの文法から外れませんが,全てのプログラミング言語には環境毎の方言があります
Unityではどうなるのかを,実際に試して把握する所から始めます

●変数の宣言
var 変数名 : 型 = 初期化内容;
です

例)変数を整数で宣言して,0で初期化する
var a : int = 0;

例)変数を浮動小数点で宣言して,0.0で初期化する
var a : float = 0.0;

例)変数を文字列で宣言して,「test」で初期化する
var a : String = "test";
※先頭の Sは大文字なので注意のこと

……と言うのが原則ですが,そもそも int型と言うのは,OSのビット数に依存すると言うのが大昔からのお約束です(それで int4とか変な書き方することもあるわけで)


●変数の型と有効範囲
・整数型
符号付8bit整数 sbyte
符号なし8bit整数 byte
符号付16bit整数 short
符号なし16bit整数 ushort
符号付32bit整数 int
符号なし32bit整数 uint
符号付64bit整数 long
符号なし64bit整数 ulong
※普通はintを使う。±21億ぐらいの値が使えます

・不動小数点数型
32bit不動小数点数 short
64bit不動小数点数 double
※普通はfloatを使う。高い計算精度を必要とする場合にdoubleがある

実を言うと速攻で小数点演算に問題を見つけました
var a : float = 0.0;
function Update () {
    a = a + 0.1;
    print(a);
}
と書くと,時々変な値が出ます(謎
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8000001 ←
0.9000001 ←
1
1.1
1.2

ちなみに,double型だと,最初から正しく計算する気が見受けられません(汗
var a : double = 0.0;
function Update () {
    a = a + 0.1;
    print(a);
}
0.100000001490116 ←
0.200000002980232 ←
0.300000004470348 ←

本当にそうか? を確認してみる
値が化けているのであれば,if文をはさんでみればわかる
var a : float = 0.0;
function Update () {
	a = a + 0.1;
	print(a);

	if (a == 0.8) {
		print("OK!!");
	}
	if (a == 0.8000001) {
		print("Bake!!");
	}
}
これを実行して「Bake!!」が出ると変数の中身そのものが化けている
0.6
0.7
0.8000001
Bake!! ←
0.9000001

化けてるよヽ(;´Д`)ノ
float変数を if文で使うときは,十分注意する必要があると。。。

例えば小数点以下2ケタで四捨五入する,と考えるとか('-'*)
if (0.65 <= a && a < 0.75) {
//0.7の時の処理
} else if (0.75 <= a && a < 0.85) {
//0.8の時の処理 } else if (0.85 <= a && a < 0.95) {
//0.9の時の処理 }


TOPプログラマ専用Unityでゲーム開発