C# 偏移光线投射

C# 偏移光线投射,c#,unity3d,raycasting,C#,Unity3d,Raycasting,我试图在我的游戏中制造一个能看到玩家手电筒发出的光的敌人。我从手电筒的原点向5个方向进行光线投射:光束的中间,以及灯光的顶部、底部、左侧和右侧。大概是这样的: 我在播放器的手电筒中使用以下更新功能: void Update () { float angle = GetComponent<Light>().spotAngle; if (Physics.Raycast (transform.position, transform.forward, out hitMidd

我试图在我的游戏中制造一个能看到玩家手电筒发出的光的敌人。我从手电筒的原点向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;
    }
}
void更新(){
浮动角度=GetComponent().spotAngle;
if(Physics.Raycast(transform.position、transform.forward、out-middle)){
hitMiddlePosition=hitMiddle.transform.position;
}
if(Physics.Raycast(transform.position,四元数,AngleAxis(-angle,transform.up)*transform.forward,out-hitton)){
hitDownPosition=hitDown.transform.position;
}
if(Physics.Raycast(transform.position,四元数,AngleAxis(角度,transform.up)*transform.forward,out-hitUp)){
hitUpPosition=hitUp.transform.position;
}
if(Physics.Raycast(transform.position,Quaternion.AngleAxis(角度,transform.right)*transform.forward,out-hittright)){
hitRightPosition=hitRight.transform.position;
}
if(Physics.Raycast(transform.position,Quaternion.AngleAxis(-angle,transform.right)*transform.forward,out-hitlight)){
hitLeftPosition=hitLeft.transform.position;
}
}
这段代码应该跟踪每个点击的位置。然而,这些位置似乎与光束照射的位置从来没有对应过。位置通常在所有方向上都相同(矢量3(-87.77855,0,87.83269)),并且在玩家移动时不会改变。朝不同的方向看有时会改变其中一个值

我尝试了很多不同的光线投射方向的方法,但是我仍然不太确信光线是按照我想要的方向投射的

有什么建议吗


非常感谢

我找到了答案,而且(当然)非常琐碎。 问题是hit.transform.position给出了被击中对象的位置,而不是实际相交位置的位置。
将此更改为hit.point解决了问题。它现在按设计工作。

您确认所有情况下都忽略了输出吗?(是否每个案例都在运行)?您是否尝试了第11次光线投射过载,取而代之的是(Vector3、Vector3、out raycast、float distance)?3-围绕轴旋转,就像吊扇向上旋转一样。你是在混淆还是混合它们?我想如果你想在前面旋转,你应该绕Z轴旋转,而不是上方向向量。这都是我的理论问题。顺便提一下,我有一个有趣的问题。如果所有光线都照射到同一个物体上,那么它肯定会在你得到变换时返回相同的位置。位置在所有情况下:PDid你观察方向了吗?你注意到我的第四条评论了吗?这是“顺便提一下,我有一个有趣的问题。如果所有光线都照射到同一个物体上,那么它肯定会在得到transform时返回相同的位置。所有情况下的位置:P”。我也这么说:)