テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unity3D奮闘記その6

ゲームのキモ、スクリプトに挑戦だ!

プログラムを書くには言語が居る。然るべき言語で然るべき処理を追加することで、
プログラム書かれている通りに動くのだ! ←これ大事

で、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…一体何者なんだ…

前話はここらへんにして、プログラムを組むザンス

6-1


とりあえず組む前に、どうやって実現するかを考える。

バランスゲームは球を落とさないように球を転がすゲーム。
つまり、球を動かして板の外に落とす仕組みを考えればいい。
そいつを実現するためにパっと思いつく方法は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);
}

6-2
次は作成したスクリプトを、オブジェクトに適応させるザンス。

適応させる方法は、スクリプトD&Dでオブジェクトに投げるらしい。
するとオブジェクトに処理が登録されるみたい。
今回の場合は板に傾きスクリプトを付ける訳だから、CubeにBoardLeanedをD&DすればOK。
うーん、シンプル!
6-3

よし準備は整った。
さっそく実行してみるべきそうすべき。

実行ボタンを押す前に、神に祈りを捧げるべき。動きますように。


6-4


動いた!転がった!

勝った!第三部 完

ただ、気になるところもチラホラ。
球が落下した時に、地面に「ペタリ」と貼りつくような感じになる点、
落下してしばらくしてから地面を傾けても転がらない点だ。

うーん、もう一息かな?
次回はペタリってなる問題を何とかしたいな。