繁体   English   中英

为什么我的射线广播有时会检测到命中,而有时却找不到?

[英]Why does my raycast sometimes does detect a hit and sometimes wont?

我有一颗子弹,在刚体上装有脉冲。 然后,每帧我都以子弹的速度向前广播,有时可以,有时找不到敌人。 当我逐帧跳过游戏时,我可以清楚地看到我的调试射线广播在敌人的(boc)对撞机内部,但仍然找不到。 我非常确定它不会仅仅越过敌人,在编辑器中,我可以清楚地看到对撞机内部的绿色射线。

有什么建议么? 我也尝试了一个在线广播,我在这里找到了,但是给出了相同的结果。 (该线在完全相同的位置,并且还在对撞机内绘制调试线。正如我所说,这些层也是正确的,有时会,有时也找不到目标...

void Update()
{
  //get direction and distance
  Vector3 direction = _rigidBody.velocity.normalized;
  float distance = (_rigidBody.velocity.magnitude * Time.deltaTime);

  //raycast for targets
  RaycastHit raycast;
  if (Physics.Raycast(transform.position, direction, out raycast, distance, HitLayerMask))
  {
    Debug.DrawRay(transform.position, direction, Color.red);
  } 
  else
  {
    Debug.DrawRay(transform.position, direction, Color.green);
  }
}

您可以看到微小的调试射线,也可以从侧面观察对撞机。 从正面看,它也几乎位于中间。 我在想这可能是因为光线投射的开始和结束都在boxcollider内部吗?

编辑器截图

刚体被移动

//Speed = 500 in this case, but lowering doesn't change anything
rigidBody.AddRelativeForce(Vector3.forward * Speed, ForceMode.Impulse);

更新:

经过更多的调试和测试后,我发现它发生是因为您不会从对撞机内部受到打击。 这是发生了什么:

  • 子弹不在目标对撞机的外面,但是雷声广播很短就可以找到它。

  • 子弹向前移动,敌人也向前移动(彼此靠近)。 子弹现在在​​对撞机内

  • raycast不会找到敌人,因为那只是raycast的工作方式

我能做的是使光线投射的距离更远,但又不要太远,以至于导致怪异的点击,从图形上看起来很奇怪。

我以为使用

float distance = (_rigidBody.velocity.magnitude * Time.deltaTime);

就足够了(因为那是子弹到上一帧以来的移动距离,但是因为敌人也移动了,所以上面的事情可能发生。嗯,如果敌人不动就足够了:/

一种可能的解决方案是转到Project Settings -> Script execution order ,并将项目符号的MonoBehavior放在默认时间之后。 这样,在进行射线投射之前,其他所有东西都已经完成移动。 hacky解决方案,但应该可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM