« 【Unity】【事案と対策】本日のミス:Android 向けにビルドできない | トップページ | 【Unity】【MMessage】Unity+NGUIでアドベンチャーやRPGの会話調のウィンドウツールを作る@その1 »

2013年7月 1日 (月)

【Unity】PrefabPoolManagerクラスを作ってみた(再利用可能Prefabをつくる)

ゲームは初心者にやさしく さんの

Unity オブジェクトプールの作成 ~その1
http://gamesonytablet.blogspot.jp/2012/09/unity.html

とかにあるように、Instantiateは高価なのでなるべくなら再利用したい。

でもいちいちローダー書いてたら面倒、ということでそれなり使いまわしができるようなものを作ってみた。

以下注意書きとか

Prefab Poolクラス。
みんな作ってるんだろうけど、具体的なソースがちょっと出てこなかったから作ってみました系.

使用方法:
1.このスクリプトをどっか適当な空のゲームオブジェクトに追加.
2.必要だったらPrefabPoolManager.Instance.GetPrefab("prefabPath")か(GameObject go)でゲット.
3.使用し終えたらPrefabPoolManager.Instance.ReleasePrefab(prefab)でリリース.
これだけ。

便利ポイント:
1.シーン開始時ロード対応.
このスクリプトを追加したとこにあるPreloadPrefabを弄ってください.
あとなんも考えずに作ってるとき用にシーン開始時に適当に使ってもロード可能.

2.おまけのPrefabPreloader.csを使うと、PrefabPoolManagerがついてるゲームオブジェクトをいちいち変更しなくてもロードできる.
たとえばマリ○オのキラー発射台Prefabとか作ったなら,そのプレハブにPrefabPreloaderをくっつけて、
キラーPrefabをついでに読み込むようにできる.

3.filepath基準のロードとGameObject基準のロードが混在可能.
GameObject基準はインスペクタ上で処理しやすいし、filepath基準はスクリプト上から弄りやすい.
Enumを無理やりToString()してfilepathにして使うもよし.
適当にインスペクタからアタッチして使うもよし.



注意点:
1.SingletonMonoBehaviourクラスはテラシュールウェアさんの[Unity3D]もっと楽なシングルトンの実装 を元に実装したクラス.
(http://terasur.blog.fc2.com/blog-entry-311.html)
単純にAwake時に保障されてるシングルトンクラスなららなんでもいいので、好きに上書きしてください。

2.メモリが足らなくなったら自動で解放とかはしてません。
適当に解放してください。
多いのを減らすとかのクラスも作ってないです。
つーかそこまで作るなら売る.

3.filepathはResoucesフォルダからのファイルパス。
Assets/Resouces/killer.prefab なら"killer" が filepath.
Assets/Resouces/bullets/killer.prefabなら"bullets/killer" が filepath.
つまるところResouces.Load()と一緒.

4.Resouces以下に同名Prefabが二つ以上あったら挙動は保障できません.
管理がfilepathじゃなくてfilenameで管理してるので、
別フォルダに同名ファイルがあってもダメです.つまり注意点3.の例のファイルが両方あった場合よくわかんない挙動をします.
いいやり方募集中.GameObject/Text管理をやめるってのは無しで.
GameObjectのUnityフォルダ上の場所がランタイムでも保障されてりゃパス管理にするんだけど...

5.リリースの処理がGameObject.nameに依存するというヤンキーアルゴリズムを使用.
実行時に名前を変えたい人がいた場合すみませんが勘弁してください.

番外.公開にあたって適当に名前変えまくったので、結構名前が混在してるけど勘弁してください.

あとおまけ 適当なSpawnerPrefabにくっつけて、SpawnするPrefabを登録しとくと
Spwanerが作られた際についでに子も必要数確保してくれる。
すでに親prefabがロードしてあるばあいはロードしない。

« 【Unity】【事案と対策】本日のミス:Android 向けにビルドできない | トップページ | 【Unity】【MMessage】Unity+NGUIでアドベンチャーやRPGの会話調のウィンドウツールを作る@その1 »

Unity」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1882320/52252643

この記事へのトラックバック一覧です: 【Unity】PrefabPoolManagerクラスを作ってみた(再利用可能Prefabをつくる):

« 【Unity】【事案と対策】本日のミス:Android 向けにビルドできない | トップページ | 【Unity】【MMessage】Unity+NGUIでアドベンチャーやRPGの会話調のウィンドウツールを作る@その1 »