[英]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.