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

Unity VRゲームの作り方

Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】

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

しかし、

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

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

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

前回の記事↓

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

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

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

重力処理をなくす

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

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の本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】
【必見】無料資料請求でスクエアエニックスのゲーム開発の企画動画が見れる学校アリ
令和時代のゲームクリエイターになるための必須スキルがUnity。未経験からでもUnityを学んでオリジナルゲーム制作&ゲーム会社就職が可能なゲーム専門学校・プログラミングスクールの情報をオンライン&対面形式に分けてまとめました。 無料資料請求でスクエアエニックスのゲーム開発企画の動画もらえるので見てみるといいですよ。
Unity VRゲームの作り方
unity入門の森 ゲームの作り方

コメント

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