Unityに関連する記事です

 前回の記事から引き続き、オブジェクトプールの機能の実装を行います。

   => 【2D】オブジェクトプールを活用した弾生成の最適化
 


1.オブジェクトプール専用のプレハブを作成する


 弾用のプレハブがそれぞれあると思いますので、どちらも複製して名称変更します。
そしてアタッチするスクリプトを変更しておきましょう。


<Prefabs フォルダ>



<旋回する弾>



<投射する弾>


 
 スクリプトを変更しておかないと、Generator 用のスクリプトにアサイン出来ません。


2.弾を生成するクラスの修正用サンプルコード


 こちらも先ほどの手順で作成した OrbitingBulletGenerator をスクリプトを元に修正します。
ただし、修正箇所が多いため、新しいスクリプトを作成し直した方がよいでしょう。

 MonoBehaviour クラスではなく、GeneratorBase クラスを継承しています。
そのため、このクラスには、GeneratorBase クラスに定義されているすべての機能が備わっています。

 旋回する弾(OrbitingBullet)については、オブジェクトプールの機能を利用して、生成・表示を行います。

 いままでと同じように投射する弾を生成し、初期設定する命令と発射する命令を実行していますが、
発射し終わった旋回する弾をオブジェクトプールに戻すようにしています。



OrbitingBulletGenerator_Pool.cs

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




 弾を生成する処理がオブジェクトプールの機能を利用する方法にリファクタリングされています。

// 弾を生成する
// オブジェクトプールから取り出す。無ければ生成する
BulletBase bullet = GetBullet(transform.position, Quaternion.identity);

 この処理の前後(DOTween を利用する部分など)は変更ありません。



 また以前は旋回する弾を破棄していた部分については、投射用のスクリプト内でオブジェクトプールに戻す処理を行っているため、
代わりに List の中身を削除するだけになっています。


3.修正(作成)した Generator スクリプトの設定を行う


 新しく作成した Generator スクリプトをプレイヤー用のゲームオブジェクトにアタッチします。
(修正して利用する場合には、すでにアタッチされていますので、アタッチは不要です。)

 アタッチされているゲームオブジェクトのインスペクターを確認し、新しく追加した変数の設定を行います。


インスペクター画像




 orbitingBulletPrefab 変数と throwingBulletPrefab 変数には、新しく作成した弾のプレハブをそれぞれアサインします。

 throwingSpeed 変数は投射する速度、duration は投射する弾の生存期間です。生存期間後に破壊されます。

 下記は参考値です。


インスペクター画像



4.攻撃処理用のスクリプトを修正する


 抜粋しますので、自分のプロジェクトに合わせて実装してください。



 仮に CharaController としています。

CharaController.cs


 スクリプトを修正したらセーブします。 


5.プレイヤーの設定を行う


 プレイヤー用のゲームオブジェクト(この例では CharaSet ゲームオブジェクト)を選択し、インスペクターを確認します。
新しく追加した変数が表示されていますので、同じゲームオブジェクトにアタッチしている Generator 用のスクリプトをアサインしてください。


<アサイン前>



<アサイン後とアサインする Generator 用のスクリプト>



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


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

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

 インスペクターで生成する弾の数を指定できますので、値を変更しながらデバッグして確認する必要があります
弾の数に応じて等間隔で配置されるかを確認しましょう。


<確認動画 ーボタンを押すとプレイヤーの進行方向に弾をまとめて投射するー>
動画ファイルへのリンク


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


 以上で完成です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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