偏移量的光线投射

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 解决了问题。它现在按设计工作。