ブロックの射出先を示すポインター作り/射出後に他ブロックに引っかかるバグを修正 | Unity入門の森 ゲームの作り方

ブロックの射出先を示すポインター作り/射出後に他ブロックに引っかかるバグを修正

Unity VRゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

ここまででかなりVRシューティングテトリスの仕組みができてきました。

しかし、

  • ブロックがどこに飛んでいくのかわかりにくい
  • ブロックがたまにフィールドに引っ掛かってしまう

といったプレイする上で致命的な欠点が残っています。

特に、ブロックがフィールドに引っ掛かって誤動作を起こしてしまうのを防ぎたいですね。

前回の記事↓

テトリスブロックが一列揃ったら消える処理の作り方
今回はテトリスブロックが一列揃ったら消える処理を作っていきます。 前回の記事↓ 一列揃ったら消える処理の作り方 BlockのTagの追加 まずは、Hierarchyに存在するブロックを取得しやすくするため、プレハブのBlockに「block...

【Line登録者限定のプレゼントもあるよ!】

ブロックが衝突する場所にポインタを表示させる処理

今回は、ブロックが衝突する場所が分かりやすくするようにポインタを表示させるようにします。

重力処理をなくす

まずは処理を簡単にするため、発射するブロックユニットの重力処理をなくして一直線に発射できるようにします。

BlockBazooka.csのFire()を下のように書き換えて重力処理をなくしましょう。

衝突先を可視化

次に、ポインタのゲームオブジェクトを作成して、衝突先を可視化させていきます。まずは、ポインタのゲームオブジェクトを処理しやすくするため、BlockBazooka.csに以下を定義しましょう。

そして、インスペクタの各コントローラのOVRControllerPrefabの子オブジェクトとしてSphereを生成しましょう。Scaleは0.05にしましょう。

生成したSphereを先ほど作成したFieldオブジェクトのPointObjに割り当てましょう。

そして、ポインタを可視化させるための関数ViewPointer()を追加します。この関数内では、Physics.RaycastAll()を使用して、コントローラの指す先の方向にぶつかったゲームオブジェクトをすべて取得するようにしています。ここで取得したい部分はFieldに当たった場合であるため、衝突したゲームオブジェクトの名前が”Field”のときpointObjの座標を変化させるように

そして、GameStatusが「Shot」のときのみ、ViewPointer()を処理させるようにします。Field.csのUpdate()を以下のように書き換えましょう。

この作業を右手と左手のコントローラの両方に割り当ててください

この状態で実行してみましょう。
Field内の衝突する場所がポインタとして表示されている様子が確認できます。

【演出】ブロックが収まらない場合どこかへ飛んでいく処理

ここでは、演出を少し考慮していきます。
Field.csのOnCollisionEnter()ではめられないブロックを遠くへ飛ばす処理を実装していきます。

追加したAddForce()により、フィールドから跳ね返るような方向にブロックが飛んでいくように処理することができます。

では、この状態で実行してみましょう。ブロックが跳ね返る様子が確認できたでしょうか?

次回の記事↓

スコア表示と得点処理・ブロック消去時のエフェクトアニメーションの作り方
前回まででVRシューティングテトリスのロジック構築は終了です。 今回はゲームの味付けとしてスコア表示・テトリスブロックが一列揃った時に消えるエフェクトの追加を行いましょう。 前回の記事↓ スコアの表示と得点処理の作り方 今回は、一列揃ったら...


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました