1215 ボールを飛ばそう! その5 - mishimatsu/AdventCalendar2014 GitHub Wiki
ボールを飛ばそう! その5
前回は、ボールを飛ばして、円柱を倒そうとして、倒れませんでした。
今回は、円柱を倒せるようにしてみます。
これは、前回の練習問題にしていましたができましたか?
ドミノ倒しを作った時には、ドミノの厚さを薄くして、倒れるようにしました。
いろいろな方法がありますが今回は、重さを変更して対応してみましょう。
いつものようにUnityを起動します。
ボールの重さを重くしよう!
ボールの重さは、RigidbodyのMassになります。
単位は、キログラム(Kg)です。
今回は、5.89Kgにしてみましょう。
実行してみます。
・・・
ボールの進みが遅くなって、そして、円柱は倒れませんでした。
今度は、スピードを変えてみましょう。
Ballのスクリプトをダブルクリックして、MonoDevelopを起動します。
現在のスピードは、10.0です。
ボールのスピードを2倍の20.0にしてみましょう。
実行してみます。
・・・
ボールのスピードを30.0に変更しましょう。
実行します。
・・・
円柱が地面に埋まっていました。
円柱を地面の上まで移動します。
円柱のPosition(位置)を0,1.5,6へ変更しました。
これで、大丈夫なはずです。
実行します。
・・・orz
倒れません。
円柱(Cylinder)のInspectorを見るとRigidbodyが追加されていませんでした。
円柱にRigidbodyを追加します。
重さを1.6に変更します。
実行してみましょう。
無事に円柱が倒れました。
今回、スピードを調整する際に、UnityとMonoDevelopを行ったり来たりして非常に面倒ですよね。
スピードは、Unity側だけで調整できるようにスクリプトを変更してみましょう。
5行目に、public float speed;を追加
ボールのスピードは、変数で与えるようにします。
publicのキーワードは、この変数にBallクラスの外からアクセスできますという意味になります。
15行目の30.0がspeedに置き換わっています。
これで、speedの値が変わればスピードが変わることになります。
変更前
rigidbody.AddForce(Vector3.forward * 30.0, ForceMode.Impulse);
変更後
rigidbody.AddForce(Vector3.forward * speed, ForceMode.Impulse);
Unityに戻って、Ballを選択します。
InspectorのBall(Script)を確認してみましょう。
Speedという項目が追加されていると思います。
この値を変更することで、スクリプト側のspeedを変更することができます。
値を変更するだけならわざわざMonoDevelopを開いてスクリプトを編集するという手間がなくなります。
初期値を変更しよう!
Speedの値が0になっていると思うので、30に変更してみましょう。
実行してみましょう。
無事に倒れましたね。
今回使った、Unity上でスクリプトの変数を変更できる仕組みは、非常に重要です。
ゲームのパラメータなどを素早く調整する際に、かなり時間を短縮することができます。
ドンドン活用していきましょう。
練習問題
speedにいろいろな値をいれて、動作を確認してみましょう。
スクリプトに書いたpublic float speed;のpublicを削除したらどうなるかを確認してみましょう。
今回、まさか円柱が倒れないというハプニングがあって、ちょっと焦りましたが無事目的を果たすことができました。
明日は、円柱の数を増やしてもう少しゲームっぽくしたいと思います。
それでは、楽しいUnity Lifeを!