我有一把枪,有4个枪口。每个枪口都可以发射子弹(因此可以一次发射4发子弹)。在我的场景中,我有100支枪,因此可以同时射击400发子弹。
问题是,如果枪的数量低于20,则表示确定,但是如果我把它提高到20以上,则一些子弹穿过目标(一个大的立方体)。如果它超过100,那么就会有很多子弹通过立方体。
这是检查碰撞的代码:
private IEnumerator ProjectileCoroutine() {
while (Vector3.Distance(transform.position, Target.transform.position) > 5)
{
yield return null;
}
Explode();
yield break;
}
一些注意事项:
任何人都可以告诉我发生了什么事吗? 我怀疑Unity会跳过一些帧,因为Coroutine与它有一些联系。
答案 0 :(得分:2)
我不认为Unity是“跳帧”。也就是说,我希望你的协程只能在每个完整的图形框架上运行一次。物理更新通常更频繁地发生,尤其是在较低的帧速率下。
请注意,子弹越多,场景可能越慢。对于时间步进的物理模拟,这意味着子弹必须在每个步骤中进一步移动。如果子弹快速移动,并且时间步长很大,则子弹可能在立方体中移动得太远,以便在帧中检测和解决碰撞。如果这是问题,您可能需要添加某种光线投射,以更好地检测碰撞。
那就是说,我不认为您的ProjectileCoroutine是解决碰撞的最佳方式。对于初学者来说,它似乎是检查一个球体,而不是一个立方体,并且为每个子弹运行它是一个糟糕的主观表现。
使用合适的碰撞器会更好,并依靠实际的物理引擎来检测碰撞,而不是进行手动距离检查。