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