我有一个方法,用这个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使用率。
发布于 2016-08-28 07:00:26
用约翰·约翰逊的产卵池解决。很容易实现:
GameObject obj = SpawningPool.createFromCache(""+Random.Range(0, 15))所有预制件都是通过键名访问SpawningPool对象的。我现在使用的是完全推荐的Destroy(),而不是SpawningPool.ReturnToCache(gameObject),而是大大减少了CPU的使用。
https://stackoverflow.com/questions/39185026
复制相似问题