読者です 読者をやめる 読者になる 読者になる

Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity2】ブロックを消そう!AddForce, OnCollisionEnter, Physics Material【ブロック崩し2】

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

Unityバージョン:5.0.0f4 Personal (2015年4月)

f:id:hiyotama:20150423102016p:plain

 

前回の続きを書いていきたいと思います〜

今回は、ボールに動きを加えるのと、ボールがブロックに当たった時にブロックを消したいと思います〜

【目標】ボールをぶつけて、ブロックを消す!

【課題1】ボールを動かす

まずは前回作成したボールに、RigidBodyコンポーネントをくっつけて下さい〜

そして、RigidBody>Constraintsを開いて、FreezePositionのZ、FreezeRotationのX,Y,Zにチェックを入れて下さい〜こうすることによって、ボールはZ軸方向(つまり画面の奥)へは進みませんし、回転も全くかからなくなります〜

次に空気抵抗を表すDragを0、UseGravityのチェックを外して無重力状態にして下さい〜

質量を表すMassは1にしても1000にしても無重力なので変わらないです〜回転の空気抵抗を表すAngularDragも、回転を制限しているため値を変えても問題ないです〜

最後にCollisionDetectionをContinuousに変更しましょう〜こうすると連続的に衝突判定をしてくれます〜今回のボールは結構早く動くので、Discrete(個別判定)のままだとすり抜けてしまいます〜

f:id:hiyotama:20150423134725p:plain

こんな感じに設定しました

 

さて続いて、Ballオブジェクトに以下のC#scriptを付けます〜

AddForceを使って、ボールに右上への力を加えています〜

【※※※Unity5におけるルール変更※※※】

AddForceのような重力関係の処理を行う時、RigidBodyというコンポーネントを必要としますが、Unity4までは「rigidBody(頭文字が小文字)」と書けば使うことができました〜これはUnityが暗黙的に「GetComponent<RigidBody>()」という処理をやってくれていたのですが、Unity5からは明示的に書かないといけなくなりました〜

上のコードのようにStartメソッドで一度GetComponentを「rb」に入れておけば、あとはこのscript内で「rb」と書くだけで何度でも使い回すことができます〜(これをキャッシュすると言います〜)

 

AddForceの一番後ろについているForceMode.VelocityChangeは、ブロック崩しの時は決まり文句だということです。「その質量を無視して、rigidBodyに瞬時に速度変化を追加します。」だそうです〜

これでとりあえずボールが動くようになりました〜

f:id:hiyotama:20150423135129p:plain

 

【課題2】ブロックとの衝突判定

ボールがブロックに当たった時、ボールが消えるようにしたいと思います〜

非常にシンプルなscriptをブロックに付けることで、ボールとブロックが衝突した時にブロックを消すことができます!

ブロックに当っても跳ね返ることなく、触れる物全てを消し去る悪魔のようなボールが完成しました

f:id:hiyotama:20150423153454p:plain

跳ね返らない・・・

これではゲームとしてあまり面白くないので、ブロックにぶつかった時ボールが跳ね返るようにしましょう!

Project>Create>Physics Materialを選択し、「bounce」と名前をつけて保存しておきましょう〜

Inspectorから設定していきます〜

DynamicFrictionは移動中の摩擦による減速を定義します〜0に設定して動き続けるようにしましょう!

StaticFrictionは何かに接している時の摩擦を定義します〜0に設定して綺麗に反射するようにしましょう〜(氷の上をすべるアクションを作る際にも、StaticFrictionを0にするといいんですかね〜)

跳ね返し度合いを定義するBouncinessは1にします〜こうすることによって力を失わず跳ね返ってくれます〜

FrictionCombineは、2つの衝突するオブジェクトの摩擦を定義します〜Averageは摩擦が平均化され、Minimumで2つのうち小さい方の摩擦値が使われ、Maximumは逆に大きい値が使われ、Multyplyは2つの摩擦値が乗算されます〜今回はMinimumに設定します〜

BounceCombineは、FrictionCombineの摩擦値が跳ね返し度合いに変わったものです〜こちらはMaximumに設定します〜

f:id:hiyotama:20150424102334p:plain

PhysicsMaterialをボールにつけます〜SphereColliderコンポーネントのMaterialにつけると・・・

f:id:hiyotama:20150423155223p:plain

 

ブロックが消え、ボールもしっかりと跳ね返ってくれます!

f:id:hiyotama:20150423155338p:plain

 

今回はここまで、次回はプレイヤーを動かして、ゲームが続くようにしたいと思います〜

ありがとうございました〜

 

【Unity開発2】下準備【ブロック崩し1/5】

【Unity開発2】ボールをぶつけて、ブロックを消したい!【ブロック崩し:2/5】

【Unity開発2】プレイヤーを動かしてゲームを継続させたい!【ブロック崩し:3/5】

【Unity開発2】ゲームオーバー・ゲームクリアを出したい!(前編)【ブロック崩し:4/5】

【Unity開発2】ゲームオーバー・ゲームクリアを出したい!(後編)【ブロック崩し:5/5(Fin)】