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

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

Unity VRゲームの作り方

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

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

しかし、

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

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

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

前回の記事↓

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

【ゲームの作り方講座プレゼント中!】

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

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

重力処理をなくす

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

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入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

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