1218 ボールのスピードを変えよう! - mishimatsu/AdventCalendar2014 GitHub Wiki

前回は、パワーゲージを時間に応じて変化させました。 今回は、パワーゲージの強さに応じて、ボールを投げるスピードを変えてみたいと思います。 まずは、Unityを起動しましょう。 今回もBallスクリプトを変更します。 Ballスクリプトをダブルクリックして、Monodevelopを起動します。 パワーゲージの強さをスピードに反映しよう! totalTimeは、0.0-1.0までの値を取るので、これをスピードの割合として利用してみましょう。 25行目 rigidbody.AddForce(Vector3.forward * speed * totalTime, ForceMode.Impulse); 変更前 rigidbody.AddForce(Vector3.forward * speed, ForceMode.Impulse); 変更後 rigidbody.AddForce(Vector3.forward * speed * totalTime, ForceMode.Impulse); speedの後に、* totalTimeが追加されています。 これによって、ボールに与えるスピードが0.0からspeedまでの値を取ることになります。 まずは、実行してみましょう。 パワーゲージの長さによって、ボールのスピードは変わっているようです。 ただ、常にパワーゲージが動いているので、どのくらいの強さでボールを投げたのかわかりにくいですね。 ボールを投げたらパワーゲージのアニメーションを止めるようにしてみましょう。 バワーゲージのアニメーションを止めるには、どうすればいいのでしょうか? パワーゲージのアニメーションをする、しない条件は、何でしょうか? ボールを投げたらパワーゲージのアニメーションをしない。 ボールを投げる前は、パワーゲージのアニメーションをする。 この条件を保持しておく変数を用意すれば対応できそうです。 このような条件を保持する変数の型が用意されています。 ここまで、スクリプトを書いてきたので、気がついた人もいると思います。 bool型の変数を使うことで、この条件に合う変数を作成できそうです。 bool型の変数は、true,falseの2つの値のみを取ることができます。 ボールを投げる前を、false、 ボールを投げた時に、true となるbool型の変数isThrowingを追加します。 11行目 private bool isThrowing = false; privateになっているのは、このクラスからのみ参照する変数だからです。 初期値には、falseを与ええて、まだ、投げていない状態にしています。 パワーゲージのアニメーションを止める。 ボールを投げたらパワーゲージのアニメーションを止める必要があります。 そのためには、2つの処理が必要です。 1.ボールを投げたらパワーゲージの幅の計算をやめる。 2.ボールを投げたらisThrowingをtrueにする。 この2つの処理を追加しましょう。 20行目 if (isThrowing == false) { 条件文を使って、ボールが投げられているかをチェックします。 新しい==演算子が出てきました。 これは、比較する2つの値が等しいかをチェックする演算子です。 isThrowingの値がfalse、つまり、ボールが投げられていない場合に、trueになります。 ボールが投げられている場合には、isThrowingの値は、trueのため、この比較は、falseになります。 if文のブロックは、条件がtrueの場合に、実行されるので、ボールを投げられていない場合に、if文に続く totalTime += Time.deltaTime * gaugeSpeed; totalTime = Mathf.Repeat(totalTime, 1.0f); gaugeWidth = gaugeMaxWidth * totalTime; の処理が実行されます。 ボールが投げられたら時間によって、パワーゲージの幅を計算する処理が行われないために、結果としてパワーゲージのアニメーションが行われなくなります。 24行目の}を忘れないように!! if文の後の{と最後の}は、対になっているので、片方がかけるとエラーになります。 スクリプトの書き始めは、なぜ間違っているのかわからなくなるので、よく見て入力しましょう。 27行目 isThrowing = true; Fire1ボタンを押されて、ボールが投げられたらボールを投げたフラグisThrowingをtrueにします。 20行目では、==演算子で比較していましたが、ここは、=演算子でtrueをisThrowingに代入しています。 間違えないように注意してください。 実行してみよう! うまくいきましたね。 静止画じゃわかりませんけど・・・orz 倒せるものをいっぱいおいてみましょう。 今回は、円柱を6つ、キューブを潰して、板にしたものを2つ使って、建物?を作ってみました。 実行してみましょう。 ボールが当たると全部壊れました! 練習問題 色んな物の種類、数を増やして、もっと楽しくしてみましょう。 今回作成したゲームをUnity Web Playerで実行できるようにしておきました。 1218 ボールのスピードを変えよう! 現状だと、一回しかボールが投げられませんね。 次回は、何回もやり直しができるように、ゲームのリセット機能を追加してみましょう。 それでは、楽しいUnity Lifeを!