我试图在我的游戏中制造一个可以看到来自玩家手电筒的光线的敌人。我通过从手电筒的原点向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))并且在玩家移动时不会改变。从不同的方向看,有时会改变其中一个值。
我为光线投影尝试了很多不同的方向,但我仍然不太确信光线是朝着我想要的方向投射的。
任何提示?
非常感谢!
答案 0 :(得分:0)
我找到了答案,这当然是非常微不足道的。 问题是hit.transform.position给出了被击中对象的位置,而不是实际相交位置的位置。 将此更改为hit.point解决了问题。它现在按设计工作。