【发布时间】:2021-07-22 03:21:40
【问题描述】:
我有这段脚本,我收到了这个错误,我不明白为什么
RaycastHit HitFL, HitFR, HitBL, HitBR;
grounded = CastRayFrontLeft(out HitFL) || CastRayFrontRight(out HitFR) ||
CastRayBackLeft(out HitBL) || CastRayBackRight(out HitBR);
VehiculeNormal = (( HitFL.normal
+ HitFR.normal
+ HitBL.normal
+ HitBR.normal) / 4).normalized;
如您所见,.net 认为 HitFR BL 和 BR 没有分配,但它们就在上面。
我开始认为布尔表达式的执行在 CastRayFrontLeft(out HitFL) 之后停止,因为它是唯一不抛出错误的,但我不明白为什么它应该以这种方式工作。
我找到的对这个问题的任何答案都无济于事,因为在他们的答案中,他们没有分配我在我的答案中所做的值。
如果有男孩可以帮助我,我将不胜感激。
编辑:
下面是自定义函数的相关代码
private bool CastRayFrontRight(out RaycastHit hit)
{
return Physics.Raycast(RayCasterFrontRight.position, -transform.up, out hit, .5f);
}
public bool CastRayFrontLeft(out RaycastHit hit)
{
return Physics.Raycast(RayCasterFrontLeft.position, -transform.up, out hit, .5f);
}
private bool CastRayBackRight(out RaycastHit hit)
{
return Physics.Raycast(RayCasterBackRight.position, -transform.up, out hit, .5f);
}
public bool CastRayBackLeft(out RaycastHit hit)
{
return Physics.Raycast(RayCasterBackLeft.position, -transform.up, out hit, .5f);
}
【问题讨论】:
-
您正在使用短路
||运算符 - 如果CastRayFrontLeft(out HitFL)返回 true,则不会调用任何其他方法...所以您希望分配给 @ 什么值987654328@、HitBL和HitBR在那种情况下?如果您希望所有方法被调用,您应该使用|而不是||。我会将其添加为答案,但尚不清楚您真正想要发生什么。 -
我会试试的,我想要的是,如果四条光线中的一条击中某物,则设置为接地。谢谢你,我不知道这种行为。
-
一般来说:如果这些光线投射中的任何一个失败了怎么办?您为什么要尝试使用没有击中任何东西并因此可能返回
null的普通 Raycast? ...而且我从未见过有人会总结法线向量并取平均值...在我看来没有意义..您宁愿只使用一个 Raycast 的一击中的一个法线真的撞到了什么…… -
@derHugo 现在我想我会得到一个空指针异常或类似的东西,我会增加安全性甚至重新编写整个脚本,我只是很惊讶地看到一个错误在我没有想到这种表达的有效性之前,那种感觉
标签: c# unity3d raycasting