我有一个方法用这个for循环实例化很多对象
for(int i = 0; i < 8; i++){
Vector3 position = new Vector3(Random.Range(player.position.x+30f, player.position.x+80f), Random.Range(player.position.y, player.position.y+40), 0);
Instantiate(prefabs[Random.Range(0, 15)], position, Quaternion.identity);
}
基于游戏玩法这个循环运行让我们说每5-10秒。 (基于检查Update()
一段时间后,我在不需要的对象上使用gameObject.Destroy()
。这就是问题所在:
Instantiate
我在Profiler中看到70%的CPU使用率Destroy
我在Profiler中看到10-20%的CPU使用率Destroy
和Instantiate
方法会同时运行导致CPU限制。需要说我的目标是移动版。 FPS还可以,但在测试游戏时,手机会在一分钟内变热。我确信这不是我应该怎么做的。我已经阅读了有关轮询但不确定如何根据此代码重现它的信息。
我正在测试华为Ascend G600,但我想这不是手机问题,因为Profiler也在桌面上显示了相同的高CPU使用率。
答案 0 :(得分:0)
使用Spawning Pool by John Johnson解决。非常容易实现:
GameObject obj = SpawningPool.createFromCache(""+Random.Range(0, 15))
所有预制件都附在SpawningPool对象上,并通过键名加入。
而不是Destroy()
我正在使用SpawningPool.ReturnToCache(gameObject)
完全建议,CPU使用率会大幅降低。