読者です 読者をやめる 読者になる 読者になる

Unity AssetStoreまとめ

アセットストア日替わりタイムセールの記事を書いていきます。

PoolManager オブジェクトを使い回して生成と破棄を無くすオブジェクトプーリングのスクリプト

40% スクリプト

f:id:assetsale:20161022221946j:plain f:id:assetsale:20161018230640j:plain 今日のアセット

PoolManager

$29.95 => $18    40%

 

インスタンス生成時に掛かる負荷を回避するプーリング処理のスクリプトです。

リリース日は2011年7月と、かなり昔からあるアセットで、

評価数が★5(325)もある定番の人気アセットだ!

 

オブジェクトプーリングとは

例えば、シューティングゲームの「弾」

弾を発射する際、毎回新規でインスタンスを作ってしまうとスペックが低いマシンではカクカクしてゲームになりません。(InstantiateやDestroyはコストが高い)

 

まず、ゲーム開始時に予め何個かの弾をロードする。

発射する時に、座標位置とフラグ関連を初期化して非表示から表示にチェンジ!

 

着弾や画面外に弾が出たら、Destroyではなく非表示にして待機し、

再び発射する時にこの弾を再利用するのがオブジェクトプーリングです。

第01回 オブジェクトプーリング

 

PoolManagerが作動したタイミングで一気にロードが走り、子になってぶらさがります。

f:id:assetsale:20161018231025j:plain

 

スクリプトの記述方法

敵の作成と削除を例として、

    // 生成
    // 「Instantiate()」生成するときはSpawn()に置き換える
    Transform enemy = PoolManager.Pools["Enemies"].Spawn(myEnemyPrefab)


    // 削除
    // 「Destroy()」排除するときはDespawn()に置き換える
    PoolManager.Pools["Enemies"].Despawn(enemy);

 

イベント関数の実行順に注意

Instantiate()やDestroy()の箇所を、Spawn()とDespawn()に置き換えて、

すんなり動いてくれれば良いですが、イベント関数の実行順に違いが生じるため、

ちょっと手を加えてあげる必要が出てくるかもしれません。

 

- - - 実行時の挙動 - - -

↓ PoolManager起動

↓ 設定された数だけPrefabのインスタンスを自動生成

↓ Awake()

↓OnEnable()

↓非表示状態で待機(↑数だけループ)

〜〜〜〜

↓ Spawn()を実行

↓ OnEnable()

↓ Start()が作動

 

Spawn()で使用する前に「Awake()とOnEnable()」が動いてしまうし、

使用するまでにOnEnable()が2度発火する。挙動がおかしい時はその辺りを探ってみると良いでしょう。

 

スクリプト画面

Prefabを複数登録できる作りになっています。

それぞれPrefabの登録や起動時に準備する数など、パラメータでバランス調整します。

f:id:assetsale:20161018231024j:plain

 

PoolManager - YouTube(4:04)

 

18ドルの計算結果 (1ドル 103.8000 円)
18ドル は、 1,868円

定価29.99ドルなら、3,109円