MetalFortを少し更新(v1.3)

QiitaのUnity #3 Advent Calendar【Unity】予測射撃のスクリプトの記事を投稿しました。
スクリプトを確認するのに良い機会になりました。
そのついでに自作ゲームMetalFortに円形予測射撃を実装しました。
何気なくプレイしていると気付くか分からないぐらいの変化ですが、精度が上がって少しだけ避けにくくなっていると思います。
それ以外は特に大きな変更はありませんが、ダウンロードコードをお持ちの方は是非ダウンロードして遊んでみてください。

デジゲー博2018の進捗

制作中のゲーム、MetalFortは今回も体験版になりました・・・。
今回の大きな更新としては敵がアイテムを落とすようになり、弾が変更できるようになりました。
他には仮設定になりますがブースターを追加しました。
バージョンごとにだいぶ仕様が変わっていきそうな予感がしますが、今後もお付き合いください。

デジゲー博2017で頒布したCONCAカードが11月12日で期限切れになります。
せっかく購入して頂いたのでこちらのサイトから同じシリアルコードでダウンロードできるようにしたいと考えてます。
とはいえ、デジゲー博2018では新たにカードを用意しましたので応援してもらえるとうれしいです。
試遊もできますので是非デジゲー博に遊びに来てください。

【Unity】プレハブ用のオブジェクトプールを作ってみた

■このオブジェクトプールの特徴

よくあるオブジェクトを非アクティブ状態にしてプール。
プレハブのInstanceIDで管理するのでリストの登録が不要。
片方向リンクリストなので高速。
導入時のスクリプトの変更が少ない。
プール時だけ管理する為、普通にDestroyしても影響なし。
シーンに直接配置した場合はプールせずにDestroyする。
プレハブごとに初期化とプール時のイベントを登録。
オブジェクトプールマネージャのサンプルを付属。

ダウンロードはこちら
■ファイル構成

ObjectPool.cs :オブジェクトプール本体のスクリプト(シングルトン)
ObjectPoolItem.cs :プールしたいプレハブのルートに追加するスクリプト
ObjectPoolManager_sample.cs :プールする数を調整するスクリプトのサンプル
readme.txt :オブジェクトプールの説明

■使い方
  1. プレハブにObjectPoolItemコンポーネントを追加する。
  2. プレハブ生成はusing A_rosuko.ObjectPool;を追加して
    Instantiate(プレハブ, pos , qt);を下記に書き換えてください。
    ObjectPool.Instance.GetGameObject(プレハブ , pos , qt);
  3. プールはusing A_rosuko.ObjectPool;を追加して
    Destroy(gameObject);を下記に書き換える。
    ObjectPool.Instance.SleepGameObject(ObjectPoolItem);※ObjectPool.Instance.SleepGameObject(gameObject);でも動作しますが、
    内部でGetConponent<ObjectPoolItem>()してますのでObjectPoolItemをキャッシュして渡す方が速いです。
  4. 初期化などが必要であればエディタのインスペクターからOnEventWakeUpやOnEventSleepイベントに関数を登録してください。
■仕組み

オブジェクトプール本体のDictionaryでリンクリストの先頭を作成する。
DictionaryのキーはプレハブのInstanceIDとする。
各オブジェクトのObjectPoolItemコンポーネント側で接続するリンクリストの先頭をキャッシュしておき、先頭の次に接続する。
プールから取り出す時はリンクリストの先頭の次から取り出し、その次を先頭に接続しなおす。

■保証及び責任、著作権について

本ソフトウェアは無保証です。
本ソフトウェアの使用を通して生じたいかなる損害、不利益に対しても、制作者は責任を負わないものとします。

ObjactPool:Copyright 2018 A_rosuko
Released under the MIT license

■参考

Unity公式チュートリアル(第01回 オブジェクトプーリング)
Unityマニアックス(第1章オブジェクトプーリング)
wikipedia(Object pool pattern)