Unityに関連する記事です

 2Dゲームにおいて、一度に複数の弾の発射機能を作成した際のユースケースです。

 特にこのケースは、一度に複数発射する弾の先端を、異なる発射方向と一致させる際に必要な機能になります。

 例えば、プレイヤーの前方2方向や3方向に弾を発射する場合、弾を扇状に発射するタイプが多いと思いますが、
弾の方向設定と回転設定の処理をしっかりと行わないと、すべて同じ位置に弾が発射されることになってしまいます。

 また、複数の弾を発射する場合、弾の形状が丸型以外であってもプレイヤーの向きと弾の先端方向とを一致していないと、画面表示がちぐはぐになります。

 イメージとしては、弾を矢に置き換えてで考えたとき、矢じりの向きがプレイヤーの向いている方向と一致する形にすることが目的です。

 どういった処理を施す必要があるのかを理解しておくことで、問題を解決する能力を養うことができますし、学習することで他の弾の発射処理にも応用が出来るようになります。

 この記事では、複数の弾を扇状に発射する処理を学習しながら、正しい方向設定の方法も学習しましょう。


<扇状 2方向>



<確認動画 ー発射口の向きと弾の先端の方向が一致している 次
動画ファイルへのリンク


<確認動画 ー発射口の向きと弾の先端の方向が一致している◆次
動画ファイルへのリンク




ゲームオブジェクトの構成


 あくまでもサンプルの構成ですので、自分のプロジェクトの内容に合わせて変更して利用してください。
すでに自分のプロジェクト内にプレイヤー用のキャラがいる場合、この手順は不要です。



 この教材ではこちらの記事の内容をベースに作成しています。

   => 肥大化したクラス内の処理を、役割に応じたクラスを複数作成して分割する実装例



 ヒエラルキーで Create Empty を行い、Player 用の CharaSet ゲームオブジェクトを作成します。
その子オブジェクトとして、画像を持つ Chara オブジェクトを配置します。

 CharaSet ゲームオブジェクトには Capsule Collider2D コンポーネントと Rigidbody2D コンポーネントをアタッチしておきます。
コライダーのサイズはゲームの環境に合わせて、プレイヤーの当たり判定として利用することを前提に設定してください。
Rigidbody も Constraint の設定を行ってください。

 Chara ゲームオブジェクトの画像などについては、無料のイラスト素材や、アセットストアなどからインポートしたものを利用してください。
2D Character - Astronaut
https://assetstore.unity.com/packages/2d/character...





 下記はサンプルです。この通りである必要はありません。


CharaSet ゲームオブジェクト



CharaSet ゲームオブジェクト




Chara ゲームオブジェクト(画像設定・アニメ用)



 ゲームオブジェクトを作成するときに、親子関係がある場合、それぞれの位置が大切になります。
子オブジェクトを作成したら、まずは (0,0,0) の位置に合わせてから、調整を行うようにしましょう。


<サンプルコード>


 BulletGenerator をスクリプトし、プレイヤー用のゲームオブジェクトにアタッチします。

 弾を1つ、あるいは2つ発射するための機能です。
このクラスをプレイヤー用のゲームオブジェクトにアタッチした場合、本スクリプト内の transform.position はプレイヤーの位置になります。


BulletGenerator.cs

<= クリックすると開きます。




インスペクター画像



 BulletPrefab 変数には発射する弾をアサインします。

 OffsetDegrees 変数はプレイヤーを始点とした扇形の中心角の大きさです。
この角度の範囲内で弾が発射されます。

 下記は参考値です。


インスペクター画像



攻撃機能用の処理を追加する


 こちらも自分のプロジェクトに合わせて追加してください。

 先ほど作成した BulletGenerattor 内にある PrepareGenerateBullet(Vector2 direction, int numBullets) メソッドを実行することで
プレイヤーの向いている方向に弾を発射出来ます。

 メソッドの引数には (プレイヤーの向いている方向、生成する弾の数) をそれぞれ指定してください。

 ここでは参考用に CharaAttack クラスの修正を提示します。
クラスの設計上、プレイヤーの向いている方向は CharaController クラスで管理しているので、その情報を利用します。
生成する弾の数についてはデバッグ用に変数を作成し、そちらで確認を行います。
実際には、自分のプロジェクトの内容に応じて、例えば、プレイヤーのレベル、武器のレベルといったものから算出してつかうようにするといいでしょう。


<= クリックしたら開きます。



ゲームを実行して動作を確認する


 ゲームを実行して動作を確認しましょう。

 漠然と動かすのではなく、自分が作成したスクリプトの内容を確認し、処理が正常に動作しているかを見極める力をつけていってください。

 今回であれば、弾を1つ発射する機能と2つ発射する機能がありますので、それぞれをデバッグして確認する必要があります


<確認動画 ー発射口の向きと弾の先端の方向が一致している 次
動画ファイルへのリンク


<確認動画 ー発射口の向きと弾の先端の方向が一致している◆次
動画ファイルへのリンク


 上手く動かない場合には、Unity 内の設定や、スクリプトの内容を見直してください。



 以上で完成です。

 続いて、2方向以上に弾を発射するケースへの対応や、switch 文による分岐処理を一元化するリファクタリング手法などを学習します。

   => 【2D】一度に複数発射する弾の先端を、異なる発射方向と一致させる機能の実装例

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます