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を!