ここでは、Unity参考書のページでも紹介しました↓の本に関連する補足事項を一覧として掲載しています。
Unityの教科書 Unity 2018完全対応版 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)
Unityの教科書 Unity2019完全対応版 2D&3Dスマートフォンゲーム入門講座
この本はUnity初心者・プログラミング初心者でも手軽に始められるように、基礎的な説明や、それを補足するため図・ネコのイラストが充実しており、私ワガハイもC#スクリプト作成の基本を理解するために非常に助けられました。個人的に、初心者には是非オススメしたい1冊です!
ただそれがゆえ、少し細かい(マニアックな)ネタや、関連する話については敢えて説明を省いてある箇所があります。まぁそういった応用的な話はUnityに慣れてきたら自分で調べろって話ですね(^^;)
そこで、私ワガハイ的に、「この本を卒業して次のステップに向かう際、こういったことが気になる?調べるんじゃないかな?」と思った事柄について以下に書き並べています。是非参考になればと思います。
<2-4 変数を使ってみよう>
・%:余り
<2-5 制御文を使ってみよう>
<4-4 Tips ワールド座標系とローカル座標系>
・transform.Translate(0, -1.0f, 0, Space.World)
・+:足し算、-:引き算、*:掛け算、/:割り算、%:余り ←余りも覚えておくと便利です!
Debug.Log(10 % 3); //10÷3=3…1 ←この「余り1」が算出される
出力結果:
・if文の条件式を書く部分で、2つの条件が関わる時、
「もし条件Aかつ(and)条件Bなら」(両方の条件を満たす時のみ)→ if (A && B) { }
「もし条件A又は(or)条件Bなら」(片方の条件を満たしてればOK)→ if (A || B) { }
int Math = 55; int English = 85; if (Math >= 80 && English >= 80){ // どちらの条件も満たす場合のみtrue Debug.Log("合格!"); } else { Debug.Log("不合格!"); }
・if文の親戚で、switch文というものもあります。意味はif文と変わりませんが、書き方は以下のようになります。
int status = 0; switch (status){ // switch()←カッコ内に入る変数はintかstringのみ! case 0: Debug.Log("normal"); // status = 0 の時はコチラの分岐 break; case 1: Debug.Log("abnormal"); // status = 1 の時はコチラの分岐 break; default: Debug.Log("?????"); // status = 0でも1でもない場合 break; }
・for文関連の用語は色々ありますので覚えておくと便利です!
break:ループを途中で抜け出す(for文の外に出る)
continue:次のループに移行(ループは続く)
goto aaa:「aaa:」と書いてる箇所までジャンプ
これらの文はちょっと役割が似ていてややこしいので、下のスクリプト文も参考にして下さい。
int i; int j; int a; a=0; for(i=0; i < 5; i++){ //通常のfor-loop a++; } Debug.Log("a1:"+a); Debug.Log("i1:"+i); a=0; for(i=0; i < 5; i++){ //for-loopをbreakで抜ける if(a==3) break; a++; } Debug.Log("a2:"+a); Debug.Log("i2:"+i); a=0; for(i=0; i < 5; i++){ //continueで次のloopへ if(a==3) continue; a++; } Debug.Log("a3:"+a); Debug.Log("i3:"+i); a=0; for(i=0; i < 5; i++){ for(j=0; j < 5; j++){ //gotoで指定の箇所にジャンプ if(a==3) goto AAA; a++; } } AAA:; Debug.Log("a4:"+a); Debug.Log("i4:"+i); Debug.Log("j4:"+j);
出力結果:
・本Tipsに記載の通り、transform.Translateメソッドはオブジェクトのローカル座標系で計算されますが、transform.Translate(0, -1.0f, 0, Space.World)と書くことで、ワールド座標系での移動と計算されます。オブジェクトを回転させたり移動させたり、という場合は注意しましょう。
例1:transform.Translate(0, -1.0f, 0)…移動はローカル座標系(1秒ごとに90°回転する)なので、下動画のようにグルグル回るような移動になります。
float span = 1.0f; float delta = 0.0f; //以下はUpdateメソッド中に this.delta += Time.deltaTime; if(this.delta > this.span){ this.delta = 0.0f; //オブジェクト回転 transform.Rotate(0, 0, 90.0f); //ローカル座標系で(0,1,0)方向に進む…回転すると進行方向が変わる transform.Translate(0, 1.0f, 0); }
例2:transform.Translate(0, -1.0f, 0, Space.World)…移動はワールド座標系なので、下動画のように常に上に向かう移動になります(ローカル座標がどっち向いてようが関係なし)。
float span = 1.0f; float delta = 0.0f; //以下はUpdateメソッド中に this.delta += Time.deltaTime; if(this.delta > this.span){ this.delta = 0.0f; //オブジェクト回転 transform.Rotate(0, 0, 90.0f); //ワールド座標系で(0,1,0)方向に進む…回転しても進行方向が変わらない transform.Translate(0, 1.0f, 0,Space.World); }