所以我正在统一制作一个小游戏,你必须射击敌人。然而,当我为子弹和敌人制作脚本时,它一半有效,一半无效。有时,子弹会击中敌人并消灭敌人,但有时,需要多次射击才能发挥作用。但是当我把子弹的速度调到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)。我怎样才能解决这个问题?
问题不在于 Destroy 不能以一定的速度工作,问题在于以一定的速度您不会触发“OnTriggerEnter”。
这种现象称为“隧道效应”,当物体速度太快时就会发生这种现象。
这会导致在一帧中弹丸位于对撞机的一侧,而在下一帧中弹丸位于对撞机的另一侧,给人一种传送的感觉,所以这就是它不发生碰撞的原因,因为在任何帧中发动机已检测到碰撞。
如果您在处理高速物体时遇到问题,请尝试将刚体(正在移动的刚体)设置为插值,或使用光线投射来伪造更大的射弹碰撞器。
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |