我不是在寻找一种勺子喂养的解决方案,但也许是一些见解,因为我尝试了许多不同的场景以试图获得良好的性能。
我有一个场景,我希望随着时间对来自对撞机(投射物)的X数量的敌人(僵尸)施加伤害。
当前的Problamatic设置
目前,我的弹丸上附有一个脚本StartCoroutine
onTriggerEnter
随着时间推移会减少僵尸的生命。这非常有效,直到你想要在超过15个左右的僵尸身上造成伤害。
我认为这是来自所有StartCoroutines的一些魔术。这是我在OnTriggerEnter
调用的函数。
IEnumerator DoDOT(float damageDuration, int damageCount, float damageAmount)
{
damagingOverTime = true;
int currentCount = 0;
while (currentCount < damageCount)
{
zombieHealth -= damageAmount;
yield return new WaitForSeconds(damageDuration);
currentCount++;
}
damagingOverTime = false;
}
可能的解决方案
现在我做了一个简单的测试(僵尸数量增加了一倍),我已经将“随时间损坏”机制硬编码到僵尸更新功能上。当然,当我开始现场时,每一个僵尸都会随着时间的推移开始受到伤害,但是没有性能问题。
我想我可以在我的Zombie游戏对象中进行更新&#34;观看&#34;对于“随时间变形的伤害”标志,我的射弹可以激活该标志OnTriggerEnter
。随着时间的推移,Zombie Update将开始应用Damage。那些有更多经验的人能告诉我这是否是正确的方法,如果不是,那是什么?
先谢谢你的时间。
编辑:性能目标90 FPS而不是60FPS。我目前为DOT启动协同程序的过程实际上在理想情况下在60FPS环境中工作正常,因为您有更多的处理空间它可能导致帧丢失。但是当你瞄准90FPS时,同样的协程无法处理它,因为我们不再拥有那个额外的处理空间。我试图找出为什么我的可能解决方案在90FPS环境中提供更有效的结果,或者在90FPS环境中提供更有效结果的可能解决方案。
PS - 它不是真正的另一个僵尸射手,这些术语只是例子:D答案 0 :(得分:0)
这里需要一些调试。 您可以执行一些操作,例如计算调用此函数的次数,以确保它不会被调用太多次。
你可以尝试做的另一件事是将它移动到射弹本身的更新方法,并保留一个被这个射弹击中的所有敌人的列表(只需将它们添加到OnTriggerEnter的列表中)。 因此,不是让许多Coroutines在后台运行,而是在一个简单的循环上处理所有被它击中的敌人。
P.s在移动设备上写这个,对不起任何错误