1214 ボールを飛ばそう! その4 - mishimatsu/AdventCalendar2014 GitHub Wiki
前回は、押したボタンに応じて、ボールを動かしてみました。
今回は、ボールを飛ばして、物に当てたいと思います。
まずは、Unityを起動します。
今回もBallのスクリプトを作成するので、Ballのスクリプトをダブルクリックして、MonoDevelopを起動します。
今回、どういう動作が必要になるかを考えます。
やりたいこと
ボールの発射ボタンが押されたらボールを飛ばす。
そのために必要なこと。
1.キーが押されたかの判定。
2.ボールに移動量を与える。
これは、1211 ボールを飛ばそう! その2でやったことを同じですね。
処理自体は、すでに書いているはずです。
しかし、昨日のボールを動かす処理で、その部分がうまく動かなくなっているのでした。
まずは、その部分を修正してみましょう。
Ball.csの14行目で、ボールに力を与えていますが、このままでは、うまく行きません。
昨日BallのRigidbodyにあるIs Kinematicにチェックを入れたことが原因です。
これで、物理運動が抑制されてしまっています。
Fire1ボタンが押されたらこのフラグをfalseにすることで対応が可能です。
では、やってみましょう。
rigidbody.isKinematic = false;
を14行目に挿入します。
実行してみましょう。
BallのInspectorにあるRigidbodyにあるIs Kinematicを確認してみましょう。
実行した直後は、チェックが付いていることが確認できると思います。
Fire1を押してみましょう。
BallのInspectorにあるRigidbodyにあるIs Kinematicを確認してみます。
ボタンが押された直後Is Kinematicのチェックが外れています。
これは、
rigidbody.isKinematic = false;
によって、Is Kinematicのフラグがfalseに、なったこと意味します。
このフラグがfalaseになったため、物理運動が有効になって、ボールが飛ばせるようになりました。
現在は、上向きに飛ばすようになっているので、地面に対して水平に飛ばすように変更します。
Ball.cs 15行目のVector3.rightをVector3.forwardに変更します。
変更前
rigidbody.AddForce(Vector3.right * 10.0f, ForceMode.Impulse);
変更後
rigidbody.AddForce(Vector3.forward * 10.0f, ForceMode.Impulse);
スクリプトをセーブして、実行してみましょう。
Fire1ボタンを押すと、ボールが手前から奥に移動していくのが確認できます。
ただ、わかりにくいので、ゲームのカメラ位置を変更して、見やすくしてみましょう。
カメラの位置、回転を変更。
HierarchyのMain Cameraを選択して、位置、回転を変更します。
Scene上のカメラを操作して、見やすい位置に変更しても大丈夫です。
今回は、位置(Position)を0,4,-15
回転(Rotation)を10,0,0にしました。
実行してみましょう。
少しボールの位置が前過ぎますね。
ボールの位置を修正してみましょう。
ボールの位置(Position)は、0,1,-9に変更しました。
実行して確認してみましょう。
ピンを並べよう!
円柱(cylinder)を並べて倒せるようにしてみましょう。
メニュ→GameObject→3D Object→Cylinderを選択します。
円柱の位置を0,0.5,6、
拡大率を0.5,1,0.5へ変更します。
実行してみましょう。
・・・
別の角度から見てみましょう。
GameのタブからSceneのタブへ切り替えることで、実行中の画面を別の角度から見ることが可能です。
どうやら円柱に当たって、ボールが止まってしまっているようです。
明日は、円柱が倒れるようにしていきたいと思います。
練習問題
ボールが当たったら円柱を倒れるようにするには、どうすればいいでしょう?
自分で、ものが動かせるようになって、だんだん楽しくなってきたと思います。
明日は、円柱を倒れるようにしたいと思います。
それでは、楽しいUnity Lifeを!