C# 如果有镜子,激光会忽略其他物体

C# 如果有镜子,激光会忽略其他物体,c#,unity3d,C#,Unity3d,我看不出代码中有什么问题,但在游戏中,若光束前面的任何地方有镜子,它就会忽略所有其他物体 谁能帮我一下,为什么会这样 我不能这么说,因为“都是代码和东西” 公共类激光束:单一行为{ 线性r; 公共布尔等值线=真; 向量3s; 无效开始(){ lr=GetComponent(); } 无效更新(){ s=新矢量3(transform.position.x,transform.position.y+(2/5f),transform.position.z); lr.设定位置(0,s); lr.设定宽度

我看不出代码中有什么问题,但在游戏中,若光束前面的任何地方有镜子,它就会忽略所有其他物体

谁能帮我一下,为什么会这样

我不能这么说,因为“都是代码和东西”

公共类激光束:单一行为{
线性r;
公共布尔等值线=真;
向量3s;
无效开始(){
lr=GetComponent();
}
无效更新(){
s=新矢量3(transform.position.x,transform.position.y+(2/5f),transform.position.z);
lr.设定位置(0,s);
lr.设定宽度(0.3f,0.3f);
if(等参线)
{
RaycastHit[]命中=物理.RaycastAll(s,transform.forward,100.0F);
//Debug.Log(“isOpen W”);
如果(Hit.Length>0)
{
对于(int x=0;x0)
{
对于(int x=0;x
我看不出代码中有什么问题,但在游戏中,若光束前面的任何地方有镜子,它就会忽略所有其他物体

谁能帮我一下,为什么会这样


我不能这么说,因为“都是代码和东西”

在这种情况下,我认为你无法摆脱图层,但你需要知道如何使用它们,无论如何,这应该是可行的:

if (Hit.Length > 0)
{
    float firstHitDistance = 100000f; //or something ridiculously high
    RaycastHit firstHit;
    for (int x = 0; x < Hit.Length; x++)
    {
        if(Hit[x].distance < firstHitDistance){
            firstHitDistance = Hit[x].distance;
            firstHit = Hit[x];
        }
    }

                if (firstHit.collider.tag  == "Mirror" || !firstHit.collider.isTrigger)
                {
                    Debug.DrawLine(s, firstHit.point, Color.blue);
                    lr.SetPosition(1, firstHit.point);
                   // Debug.Log("loop W" + x);
                    if (firstHit.collider.tag == "Mirror") Reflect(s, , 0);
                    else lr.SetVertexCount(2);
                    break; 
                }
}
if(Hit.Length>0)
{
float firstHitDistance=100000f;//或者高得离谱的东西
雷卡斯特第一次击中;
对于(int x=0;x

很抱歉,格式错误,我使用的是windows://

确定。Morrror是一个3D模型。你到底在干什么?如果你想忽略镜像,你可以将它放在另一层,并修改你的
物理。RaycastAll
以排除该层。不,我不想忽略镜像,我想在同一方向有镜像时不要忽略其他对象,但如果有镜像,激光只会忽略其他对象@Programmer@KodeKishin你需要学习Unity中的层。@JoeBlow它们都在同一层。好的,很少有视频游戏能帮助我们
if (Hit.Length > 0)
{
    float firstHitDistance = 100000f; //or something ridiculously high
    RaycastHit firstHit;
    for (int x = 0; x < Hit.Length; x++)
    {
        if(Hit[x].distance < firstHitDistance){
            firstHitDistance = Hit[x].distance;
            firstHit = Hit[x];
        }
    }

                if (firstHit.collider.tag  == "Mirror" || !firstHit.collider.isTrigger)
                {
                    Debug.DrawLine(s, firstHit.point, Color.blue);
                    lr.SetPosition(1, firstHit.point);
                   // Debug.Log("loop W" + x);
                    if (firstHit.collider.tag == "Mirror") Reflect(s, , 0);
                    else lr.SetVertexCount(2);
                    break; 
                }
}