我是否遗漏了什么或Unity3d跳过了帧?
我有一把四口的枪。每个枪口可以发射一颗子弹(因此一次可以发射4颗子弹)。在我的场景中,我有100支枪,因此可以同时发射400发子弹 问题是,如果枪的数量低于20,那么就可以了,但是如果我把枪的数量提高到20以上,一些子弹就会穿过目标(一个大立方体)。如果立方体超过100,就会有大量子弹穿过 这是检查碰撞的代码:我是否遗漏了什么或Unity3d跳过了帧?,unity3d,collision-detection,coroutine,frame-rate,Unity3d,Collision Detection,Coroutine,Frame Rate,我有一把四口的枪。每个枪口可以发射一颗子弹(因此一次可以发射4颗子弹)。在我的场景中,我有100支枪,因此可以同时发射400发子弹 问题是,如果枪的数量低于20,那么就可以了,但是如果我把枪的数量提高到20以上,一些子弹就会穿过目标(一个大立方体)。如果立方体超过100,就会有大量子弹穿过 这是检查碰撞的代码: private IEnumerator ProjectileCoroutine() { while (Vector3.Distance(transform.position,
private IEnumerator ProjectileCoroutine() {
while (Vector3.Distance(transform.position, Target.transform.position) > 5)
{
yield return null;
}
Explode();
yield break;
}
一些注意事项:
- 游戏以49-68 fps的速度运行(现场有100支枪)
- 我使用预制池方法
- 上述代码在一个单独的协同程序(Start例程)中运行
最好使用合适的对撞机,依靠实际的物理引擎来检测碰撞,而不是手动进行距离检查。谢谢兄弟你救了我一天:)正如你提到的,这是一个时间步问题。因此,我转到->[Project Settings]->[Time],并将[Maximum Allowed Timestep]减少到0.02,然后再次点击Play。对性能没有影响(实际上它的速度提高了+10fps),所有子弹都停止通过立方体。另外,我切换回光线投射方法来检查碰撞。起初我怀疑光线投射对性能有巨大的影响,所以我尝试了一个纯数学的解决方案。还有一点,移动的对撞机会严重影响性能,尤其是当您有多台对撞机时。:)