【ハルシオンブログ】Unity2021からオブジェクトプールが公式で実装されてるぽいですね。試しに使ってみました。
坂内っす。
めっさ寒くなってきましたね。
ザ・冬って感じになってきました。
風邪に気をつけましょう。
以前オブジェクトプールについて書いたのですが
http://halcyonsystemblog.jp/?q=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%97%E3%83%BC%E3%83%AB&charset=utf-8
Unity2021.1からちゃんとオブジェクトプールの機能があるぽいですね。
なので、それの紹介を簡単にしてみたいと思います。
IObjectPoolを使う感じぽいですね。
[Blog20211129.cs]
なんかちょっとめんどくさいですね。
こんな感じで使えるらしいです。
取り出す時に行う処理、プールに戻す時に行う処理、指定した数以上のオブジェクトをプールに戻す時に行う処理を初めに設定する感じぽいです。
まだまだ謎は多いですが・・・これ自前の方が楽そうではありますよねぇ
ということで、簡単にですが、Unity2021以降から使えるオブジェクトプールの説明でした。
あでゅ~ノシ
めっさ寒くなってきましたね。
ザ・冬って感じになってきました。
風邪に気をつけましょう。
以前オブジェクトプールについて書いたのですが
http://halcyonsystemblog.jp/?q=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%97%E3%83%BC%E3%83%AB&charset=utf-8
Unity2021.1からちゃんとオブジェクトプールの機能があるぽいですね。
なので、それの紹介を簡単にしてみたいと思います。
IObjectPoolを使う感じぽいですね。
[Blog20211129.cs]
using UnityEngine;
using UnityEngine.Pool;
using UnityEngine.UI;
public class Blog20211129 : MonoBehaviour
{
[SerializeField] GameObject objPref;
[SerializeField] Button btnCreate;
int defaultCapacity = 10;
int maxSize = 100;
public IObjectPool<GameObject> _pool;
public IObjectPool<GameObject> pool {
get {
if (_pool == null) {
_pool = new ObjectPool<GameObject>(CreatePoolItem, OnTakeFromPool, OnReturnedToPool, OnDestroyPoolObject, false, defaultCapacity, maxSize);
}
return _pool;
}
}
/// <summary>
/// プールオブジェクト生成
/// </summary>
/// <returns></returns>
GameObject CreatePoolItem() {
var go = Instantiate(objPref, new Vector3(Random.Range(-10f, 10), Random.Range(-10f, 10f), Random.Range(-10f, 10f)), Quaternion.identity);
return go;
}
/// <summary>
/// プールから取得するときに行う処理
/// </summary>
void OnTakeFromPool(GameObject go) {
// 特になし
}
/// <summary>
/// オブジェクトをプールに戻す時に行う処理
/// 「Called when an item is returned to the pool using Release」
/// </summary>
void OnReturnedToPool(GameObject go) {
// 特になし
}
/// <summary>
/// オブジェクトをプールに戻す時に、容量上限に達している場合に行う処理
/// </summary>
/// <param name="go"></param>
void OnDestroyPoolObject(GameObject go) {
Destroy(go);
}
void Start() {
btnCreate.onClick.AddListener(OnClickButton);
}
void OnClickButton() {
int amount = Random.Range(10, 100);
for (int i = 0; i < amount; i++) {
var ps = pool.Get();
}
}
}
なんかちょっとめんどくさいですね。
こんな感じで使えるらしいです。
取り出す時に行う処理、プールに戻す時に行う処理、指定した数以上のオブジェクトをプールに戻す時に行う処理を初めに設定する感じぽいです。
まだまだ謎は多いですが・・・これ自前の方が楽そうではありますよねぇ
ということで、簡単にですが、Unity2021以降から使えるオブジェクトプールの説明でした。
あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】GameObjectを作成した際の座標を必ず(0,0,0)にしたいとき | 【ハルシオンブログ】Prefab編集時のオートセーブ機能 »
コメント
| h o m e |