ゲームのキモ、スクリプトに挑戦だ!
プログラムを書くには言語が居る。然るべき言語で然るべき処理を追加することで、
プログラム書かれている通りに動くのだ! ←これ大事
で、Unityが対応している言語は以下の3つみたい。
1.JavaScript
2.C#
3.Boo
どれを選ぶか迷うところだが、話によるとJavaScriptは遅いらしい。
ただ型指定をしっかりすればC# 並の速度が出るとのこと。
要するに推論型指定が遅いのかな?
参考URL:http://blog.livedoor.jp/akinow/archives/52203049.html
学習コスト的にJavaScriptが簡単なんだろうけど、既にC#を覚えているのでこっちを選択。Javaと似てるし。
…Boo? Googleで調べても今ひとつ答えが見つからない…Boo…一体何者なんだ…
前話はここらへんにして、プログラムを組むザンス
とりあえず組む前に、どうやって実現するかを考える。
バランスゲームは球を落とさないように球を転がすゲーム。
つまり、球を動かして板の外に落とす仕組みを考えればいい。
そいつを実現するためにパっと思いつく方法は3つ。
1.キー操作で球に加速度をつける
2.キー操作で板を傾ける
3.キー操作で重力の方向を傾ける
今回は2を選択。だって直感的に簡単そうだし
さっそく作ってみるのです。
まずはスクリプトの作成。
ファイルが作られるので、適当な名前で保存する。今回は「BoardLeaned」としてみる。
どうやらファイル名とクラス名が同じでないとエラーとなるらしい。
ちなみに日本語のファイルはNGだった。VisualStudioは日本語表記OKだったから行けるかと思ったんだけどね。日本語プログラムって邪道?ひまわりとか。
で、作ったファイルをダブルクリックでMonoDevelopを起動。
ここで問題が発生。
何故かWindowsXPのPCでは動かなかった。とりあえずWindows7のPCに再インストかけて再開。
WindowsXPだったってのも関係しているのかな?.NETのせいかも?
(.NETのせいだった模様。.NET3.5の再配布パッケージを入れると動作する)
ソースを見てみると、MonoBehaviourクラスを継承してStartメソッドとUpdateメソッドを持ったクラスが1つ。
Startメソッドが初期化時に呼ばれる処理、Updateメソッドが定期的に呼ばれる処理…かな?
とりあえず、キーの上下左右入力で自分自身の角度を変更する処理を入力。
入力内容はこんな感じ
public float speed = 0.4f;
void Start () {}
void Update () {
// 変数初期化
float x = 0.0f;
float y = 0.0f;
// キー入力
if( Input.GetKey(KeyCode.LeftArrow)){ y += speed; }
if( Input.GetKey(KeyCode.RightArrow)){ y -= speed; }
if( Input.GetKey(KeyCode.UpArrow)){ x += speed; }
if( Input.GetKey(KeyCode.DownArrow)){ x -= speed; }
// 対象を傾ける
transform.Rotate(x,0,y);
}
次は作成したスクリプトを、オブジェクトに適応させるザンス。
適応させる方法は、スクリプトをD&Dでオブジェクトに投げるらしい。
するとオブジェクトに処理が登録されるみたい。
今回の場合は板に傾きスクリプトを付ける訳だから、CubeにBoardLeanedをD&DすればOK。
うーん、シンプル!
よし準備は整った。
さっそく実行してみるべきそうすべき。
実行ボタンを押す前に、神に祈りを捧げるべき。動きますように。
動いた!転がった!
勝った!第三部 完
ただ、気になるところもチラホラ。
球が落下した時に、地面に「ペタリ」と貼りつくような感じになる点、
落下してしばらくしてから地面を傾けても転がらない点だ。
うーん、もう一息かな?
次回はペタリってなる問題を何とかしたいな。