偏移量的光线投射
Raycast at an offset
我试图在我的游戏中创建一个可以看到玩家手电筒发出的光的敌人。我通过从手电筒的原点向 5 个方向进行光线投射来做到这一点:光束的中间,以及光的顶部、底部、左侧和右侧。像这样:
我在播放器的手电筒中使用了以下更新功能:
void Update () {
float angle = GetComponent<Light>().spotAngle;
if (Physics.Raycast (transform.position, transform.forward, out hitMiddle)){
hitMiddlePosition = hitMiddle.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis(-angle, transform.up) * transform.forward, out hitDown)){
hitDownPosition = hitDown.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis(angle,transform.up) * transform.forward, out hitUp)){
hitUpPosition = hitUp.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis (angle,transform.right) * transform.forward, out hitRight)){
hitRightPosition = hitRight.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis (-angle, transform.right) * transform.forward, out hitLeft)){
hitLeftPosition = hitLeft.transform.position;
}
}
此代码应该跟踪每个命中的位置。然而,这些位置似乎永远不会与光束击中的位置相对应。这些位置通常在所有方向上都是相同的 (Vector3(-87.77855, 0, 87.83269)),并且在玩家移动时不会改变。朝不同的方向看有时会改变其中一个值。
我尝试了很多不同的光线投射方向方式,但我仍然不太确定光线是否按照我想要的方向投射。
有什么建议吗?
非常感谢!
我找到了答案,它(当然)非常微不足道。
问题是 hit.transform.position 给出了被击中的物体的位置,而不是实际相交位置的位置。
将其更改为 hit.point 解决了问题。它现在按设计工作。
我试图在我的游戏中创建一个可以看到玩家手电筒发出的光的敌人。我通过从手电筒的原点向 5 个方向进行光线投射来做到这一点:光束的中间,以及光的顶部、底部、左侧和右侧。像这样:
我在播放器的手电筒中使用了以下更新功能:
void Update () {
float angle = GetComponent<Light>().spotAngle;
if (Physics.Raycast (transform.position, transform.forward, out hitMiddle)){
hitMiddlePosition = hitMiddle.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis(-angle, transform.up) * transform.forward, out hitDown)){
hitDownPosition = hitDown.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis(angle,transform.up) * transform.forward, out hitUp)){
hitUpPosition = hitUp.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis (angle,transform.right) * transform.forward, out hitRight)){
hitRightPosition = hitRight.transform.position;
}
if (Physics.Raycast (transform.position, Quaternion.AngleAxis (-angle, transform.right) * transform.forward, out hitLeft)){
hitLeftPosition = hitLeft.transform.position;
}
}
此代码应该跟踪每个命中的位置。然而,这些位置似乎永远不会与光束击中的位置相对应。这些位置通常在所有方向上都是相同的 (Vector3(-87.77855, 0, 87.83269)),并且在玩家移动时不会改变。朝不同的方向看有时会改变其中一个值。
我尝试了很多不同的光线投射方向方式,但我仍然不太确定光线是否按照我想要的方向投射。
有什么建议吗?
非常感谢!
我找到了答案,它(当然)非常微不足道。 问题是 hit.transform.position 给出了被击中的物体的位置,而不是实际相交位置的位置。 将其更改为 hit.point 解决了问题。它现在按设计工作。