【发布时间】:2018-08-10 19:51:14
【问题描述】:
我有一个方法可以用这个 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 中的 CPU 使用率为 70% - 在
Destroy上,我看到 Profiler 中的 CPU 使用率为 10-20% - 有时
Destroy和Instantiate方法会同时运行,从而导致 CPU 节流。
需要说明我的目标是移动设备。 FPS还可以,但是在测试游戏的时候,手机一分钟就变热了。我真的很确定我不应该这样做。我已经阅读了有关轮询的信息,但不确定如何根据此代码重现它。
我正在华为 Ascend G600 上进行测试,但我想这不是手机问题,因为 Profiler 在桌面上也显示了同样高的 CPU 使用率。
【问题讨论】:
-
要进行对象池化,您必须披露您在游戏中的具体操作。例如,什么时候必须实例化一个新的 GameObject?你什么时候毁掉它?您在场景中一次实例化和销毁的游戏对象大约有多少?