はじめてのUnity3D_その9_応用編3

はじめてのUnity3D
〇今回は、「バウンド&クリックゲーム」で、適当にクリックしまくって、運でクリアされないように、クリックすることで不利になる仕組みを入れていきます。
・具体的には、クリックすると全てのオブジェクト(正確にはBallScriptがアタッチされているオブジェクト)に対してZ方向(奥行)方向に力が加わって、各オブジェクトが暴れるようにしていきます。
〇力を加えるので、検索サイトで「unity addforce」と検索します。
・「Rigidbody-AddForce - Unity スクリプトリファレンス」を選択します。
Rigidbody-AddForce - Unity スクリプトリファレンス
Rigidbody に力を加えます
・検索したWebページをスクロールすると、下図のようなサンプルコードがあるので、「タイピング」もしくは「コピ-&ペースト」をして、「BallScript」に改良を加えます。
・下図の6,7行目のように変数を追加します。
public float thrust = 1.0f; //推力
public Rigidbody rb;
・ゲームの開始時に、ボールにアタッチされている「Rigidbody」コンポーネントにアクセスします。
rb = GetComponent<Rigidbody>();
・マウスの左ボタンが押されたら、奥行方向(Z軸方向)に力を加えます。
if (Input.GetMouseButtonDown(0))
{
rb.AddForce(0, 0, thrust, ForceMode.Impulse);
}
※「BallScript.cs」の全体像
〇実行
・適当にクリックをすると、ボールが後方に移動すればOK。
※下図は、「Scene」ビューと「Game」ビューを並べた様子です。
 赤いボールは後方への力で移動し、奥の壁で跳ね返っています。
 ただし、跳ね返って前方に移動したボールは、そのまま場外に出たっきりになってしまっています。
〇場外に出ないように、前方にも壁を作る。
・後ろの壁を複製( Ctrl + D )後、前方に移動させます。
・しかし、カメラが壁に遮られてしまい、下図右側の「Game」ビューのように、ボールなどが見えない状態になってしまいました。
〇壁のモデル(メッシュ)を無効化することで、カメラがボールなどを映せるようにします。
・「Hierarchy」ビューで前方の壁(下図はFloor(4))を選択>「Inspector」ビューで、「Mesh Renderer」コンポーネントのチェックを外し、無効化する。
※「Mesh Renderer」コンポーネントを取り除いても(「Remove Component」)、同じ効果があります。
〇実行>「Mesh Collider」コンポーネントが前方の壁に付いているが、ボールがすり抜けてしまいました。
・前方の壁を選択>「Inspector」ビュー>「Mesh Collider」>「Convex」にチェックを入れます。
〇実行>前方の壁にボールが跳ね返るようになりました。
※【公式マニュアルより】
  Convex (凸状) が有効なっているメッシュコライダーは、
  他のメッシュコライダーと衝突することができます。
Mesh Collider - Unity マニュアル
Mesh Collider (メッシュコライダー) は メッシュのアセット からそのメッシュにもとづくコライダーを生成します。複雑なメッシュの場合、プリミティブを使用するよりも遥かに正確に衝突検出できます。Convex (凸状) が有効なっ...
・しかし、ボールにマウスポインタを合わせてクリックしても、ボールが消えなくなってしまいました。
・再度、OnMouseDown関数を調べてみます。
MonoBehaviour-OnMouseDown() - Unity スクリプトリファレンス
OnMouseDown は GUIElement または Collider 上でユーザーがマウスボタンをクリックしたときに呼び出されます
・どうやら、この「OnMouseDown」関数は、マウスポインタの先から光線(Raycast)を出していて、この光線が前方の壁のコリジョンに遮られているため、赤いボールまで光線が届いていないようです。
〇公式マニュアルにあるようなレイヤ―設定を行う。
・「Hierarchy」ビューで前方の壁(Floor(4))を選択>「Inspector」ビュー>「Layer」で「Ignore Raycast」を選択。
〇実行>ボールにマウスポインタを合わせてクリックすると、ボールが消えて爆発エフェクトが出ようになりました。(元の挙動に戻りました)
・今回は、ここまでです。

・ここまでの作業で、「爆発パーティクル」と「クリックでボールに力を加える」こと出来ました。

・次回は、ボールの数を増やしたり、種類を変更して、沢山のゲームオブジェクトを配置して、ゲームを完成させたいと思います。

・以上、お疲れ様でした。
タイトルとURLをコピーしました