振り返り:弾丸プール
CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 40/50。
チャレンジ
中級射撃練習。矢印キーで戦車を左右に動かせます(準備済み)。赤いターゲット2つにはTargetスクリプトが設定されており、Hit()を使えます(準備済み)。プールされた弾を戦車から発射できるようにしましょう。
Tank.csでは、bulletPrefabから弾を生成し、プールから取り出したときに有効化し、戻ってきたときに無効化し、解放された弾を破棄し、予備の弾を最大4個保持するObjectPool<Bullet>を保持します。- スペースキーを押すと、プールから弾を取り出し、戦車の1単位前方から発射します。
Bullet.csでは、弾はspeed(15)の速度で前方(+z)に飛びます。Targetスクリプトが付いたものに命中すると(弾のコライダーはトリガーです)、ターゲットのHit()を呼び出し、すぐにプールに戻ります。何にも命中しなかった弾は、life(1)秒後にプールに戻ります。- 再利用された弾も含め、発射ごとに弾の寿命が最初から始まり、弾は1回の発射につき1度だけプールに戻ります。
Playを押し、両方のターゲットを撃ってから、Checkを押します。
自分で試してみよう
using UnityEngine;
using UnityEngine.Pool;
public class Bullet : MonoBehaviour
{
public float speed = 15f;
public float life = 1f;
// 前方へ飛び、Target に当たったとき、または life 秒後にプールへ戻る
}