统一物体的速度会影响 Destroy() 吗?

-1 c# unity-game-engine

所以我正在统一制作一个小游戏,你必须射击敌人。然而,当我为子弹和敌人制作脚本时,它一半有效,一半无效。有时,子弹会击中敌人并消灭敌人,但有时,需要多次射击才能发挥作用。但是当我把子弹的速度调到1(子弹的速度是500)时,子弹总是消灭敌人。所以这让我认为这与子弹的速度有关。这是我的脚本

// Start is called before the first frame update
void Start()
{
    
}

// Update is called once per frame
void Update()
{
    
}
private void OnTriggerEnter(Collider other)
{
    Destroy(other.gameObject);
    Destroy(gameObject);
    Debug.Log("e");
}
Run Code Online (Sandbox Code Playgroud)

对于子弹的移动,我只使用了transform.Translate(Vector3.up * Time.deltaTime * speed)。我怎样才能解决这个问题?

Lot*_*tan 6

问题不在于 Destroy 不能以一定的速度工作,问题在于以一定的速度您不会触发“OnTriggerEnter”。

这种现象称为“隧道效应”,当物体速度太快时就会发生这种现象。

这会导致在一帧中弹丸位于对撞机的一侧,而在下一帧中弹丸位于对撞机的另一侧,给人一种传送的感觉,所以这就是它不发生碰撞的原因,因为在任何帧中发动机已检测到碰撞。

如果您在处理高速物体时遇到问题,请尝试将刚体(正在移动的刚体)设置为插值,或使用光线投射来伪造更大的射弹碰撞器。