[Unity最適化]簡単なオブジェクトプールとそのテスト(二)
1857 ワード
テストコードは次のとおりです.
本人は対象のないプール、対象のあるプールのそれぞれを50回テストし、5千個のcubeを表示するようにテストした.工程実行時、何の操作もない場合FPSはおよそ80~90であり、FPSが80~90の場合にインスタンス化または対象プールから対象を取り出す.
押す瞬間、FPSの変化により、対象プールを使用する場合、FPSは主に30~50であり、30を下回る場合があり、10を下回る場合がある.対象プールを使用しない場合,FPSは主に10~35であり,10を下回る場合がある.
最高値から見ると、対象プールを使用している場合のFPSが40より高い概括は20~30%程度であり、対象プールを使用していない場合のFPSはこの50回のテストで40より高いものはなかった.総じて,オブジェクトプールの使用には一定の最適化作用がある.しかし、対象プールを使ってもFPSが10以下になるのはどういう理由なのか、私にはわかりません.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class TestObjectPool : MonoBehaviour {
public GameObject prefab;
public int prefabAmount = 5000;
List<GameObject> tempObj = new List<GameObject>();
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown(KeyCode.Q))
{
for (int i = 0; i < prefabAmount; i++)
{
GameObject obj = Instantiate(prefab) as GameObject;
tempObj.Add(obj);
}
}
if (Input.GetKeyDown(KeyCode.W))
{
for (int i = 0; i < prefabAmount; i++)
{
Destroy(tempObj[i]);
}
tempObj.Clear();
}
if (Input.GetKeyDown(KeyCode.A))
{
for (int i = 0; i < prefabAmount; i++)
if (GetComponent<ObjectPool>())
{
GameObject obj = ObjectPool.instance.GetPoolObject(prefab.name, true);
tempObj.Add(obj);
}
}
if (Input.GetKeyDown(KeyCode.S))
{
for (int i = 0; i < prefabAmount; i++)
if (GetComponent<ObjectPool>())
{
ObjectPool.instance.SetPoolObject(tempObj[i]);
}
tempObj.Clear();
}
}
}
本人は対象のないプール、対象のあるプールのそれぞれを50回テストし、5千個のcubeを表示するようにテストした.工程実行時、何の操作もない場合FPSはおよそ80~90であり、FPSが80~90の場合にインスタンス化または対象プールから対象を取り出す.
押す瞬間、FPSの変化により、対象プールを使用する場合、FPSは主に30~50であり、30を下回る場合があり、10を下回る場合がある.対象プールを使用しない場合,FPSは主に10~35であり,10を下回る場合がある.
最高値から見ると、対象プールを使用している場合のFPSが40より高い概括は20~30%程度であり、対象プールを使用していない場合のFPSはこの50回のテストで40より高いものはなかった.総じて,オブジェクトプールの使用には一定の最適化作用がある.しかし、対象プールを使ってもFPSが10以下になるのはどういう理由なのか、私にはわかりません.