多个对象随时间的损坏(90FPS / VR问题)

时间:2017-02-02 16:05:32

标签: c# unity3d virtual-reality

我不是在寻找一种勺子喂养的解决方案,但也许是一些见解,因为我尝试了许多不同的场景以试图获得良好的性能。

我有一个场景,我希望随着时间对来自对撞机(投射物)的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

1 个答案:

答案 0 :(得分:0)

这里需要一些调试。 您可以执行一些操作,例如计算调用此函数的次数,以确保它不会被调用太多次。

你可以尝试做的另一件事是将它移动到射弹本身的更新方法,并保留一个被这个射弹击中的所有敌人的列表(只需将它们添加到OnTriggerEnter的列表中)。 因此,不是让许多Coroutines在后台运行,而是在一个简单的循环上处理所有被它击中的敌人。

P.s在移动设备上写这个,对不起任何错误