1213 ボールを動かそう! - mishimatsu/AdventCalendar2014 GitHub Wiki
前回は、ボタンを押すと上にボールを飛ばすスクリプトを作成しました。
今回は、ボタンを押して、ボールを動かせるようにしてみます。
いつものように、Unityを起動します。
Ballスクリプトをダブルクリックして、MonoDevelopを起動します。
左右の方向キーが押されたらボールを移動させる。
今回の処理を実現するために必要なことは、下記の2つになります。
1.方向キーの取得する
2.方向キーに応じて、ボールを移動する
それでは、スクリプトを入力してみましょう。
今回入力するコードは、前回と同じくUpdate()の関数になります。
入力の途中で、Inputにどのような関数が使えるか候補が出るので、その中からGetButtonDownを選択します。
完成したスクリプト
今回追加したスクリプトを1つずつ見ていきましょう。
float value = Input.GetAxis("Horizontal");
新しい記述が出来てきました。
まず、float valueについて説明します。
floatは、変数の型名で、浮動小数点型を意味します。
valueは、変数の名前になります。
変数の名前は、任意の名前を使うことができますが、名前の先頭に数字を使うことは出来ません。
0tester, 2tail, 7swords, 9sistersなど、数字で始まる名前はNG。
tester0, tail2, swords7, sisters9というように、先頭が数字でなければOK。
Input.GetAxis("Horizontal");
Horizontalつまり、水平方向の入力を取得するという意味になります。
これで、カーソルキーやJoystickの左右のキーが押された状態を取得できるようになります。
キーが何も押されていない場合には、0
右が押されている場合には、1
左が押されている場合には、-1
という値が取得できます。
value = Input.GetAxis("Horizontal")は、結局何をやっているのか?
Input.GetAxis("Horizontal")で、取得したキーの状態(0, 1, -1)を取得して、その値をvalueに代入しています。
ここの「=」は、数学でいう等式(左辺と右辺が等しい)という意味ではありません。
「=」は、代入演算子と呼ばれるもので、右の値を左の変数へ代入するという意味になります。
キーが押されなかった場合、value = 0という意味になり、valueの変数の値は、0になります。
右のキーが押された場合、value = 1という意味になり、valueの変数の値は、1になります。
左のキーが押された場合、value = -1という意味になり、valueの変数の値は、-1になります。
この値を利用して、ボールを移動させます。
transform.Translate(Vector3.right * value);
Translate()関数を使って、ボールを移動させます。
Translate()関数は、引数に移動量をとります。
この引数に左右の移動量を指定して、ボールを移動させることになります。
Vector3.right * value
これは、右方向に対して、valueの値を乗算しています。
つまり、vaulueが0の場合、移動量が0になって、その場にとどまります。
valueが1の場合、移動量は、Vector3.rightのままです。
valueが-1の場合、移動量は、-Vector3.right、つまり、逆方向の移動量Vector3.leftになります。
実行してみましょう!
・・・
何か動きが変ですね。
横方向にしか移動していないのに、上に動いたりします。
これは、移動にRigidbodyの影響があるために、起こっている挙動のようです。
これを抑制するためには、BallのRigidbodyにある、Is Kinematicにチェックを入れます。
もう一度、実行してみましょう!
今度は、綺麗に動くようになりましたね。
ただ、Rigidbodyを抑制したため、床からはみ出しても下に落ちなくなりました。
また、Fire1ボタンを押してもボールが上に飛ばなくなってしまいました。
この辺りは、この先の講義で修正していきます。
あと、移動スピードが少し早いようです。
これは、練習問題にしましょう。
練習問題
ボールの移動速度を遅くしてみよう。
少しずつスクリプトの種類を増やしていきます。
明日は、ボールを飛ばして、ピンを倒すということをやりたいと思います。
それでは、楽しいUnity Lifeを!