Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';不要与对方选手碰撞_C#_Unity3d - Fatal编程技术网

C# Can';不要与对方选手碰撞

C# Can';不要与对方选手碰撞,c#,unity3d,C#,Unity3d,我对蛇进行了射线投射,以检测它是否与自己、食物或敌人发生碰撞,这对食物和蛇自身都很有效,但当它与敌人发生碰撞时,它只是通过 这是检测碰撞的代码: RaycastHit hit; if (Physics.Raycast(HeadBone.position, HeadBone.right, out hit, 1)) { if (hit.transform.tag == "Player") { NetworkManager.instance.GetComponent&

我对蛇进行了射线投射,以检测它是否与自己、食物或敌人发生碰撞,这对食物和蛇自身都很有效,但当它与敌人发生碰撞时,它只是通过

这是检测碰撞的代码:

RaycastHit hit;

if (Physics.Raycast(HeadBone.position, HeadBone.right, out hit, 1))
{
    if (hit.transform.tag == "Player")
    {
        NetworkManager.instance.GetComponent<NetworkManager>().CommadSuicide(transform.name);
        return;
    }
    else if (hit.transform.tag == "Enemy")
    {
        NetworkManager.instance.GetComponent<NetworkManager>().KillTarget(hit.transform.name);
    }
    else if (hit.transform.tag == "Food")
    {
        Eat(hit.transform.gameObject);
    }
}
raycastthit;
if(物理.光线投射(头骨.位置,头骨.右,外击,1))
{
if(hit.transform.tag==“播放器”)
{
NetworkManager.instance.GetComponent().CommadSuicide(transform.name);
回来
}
else if(hit.transform.tag==“敌人”)
{
NetworkManager.instance.GetComponent().KillTarget(hit.transform.name);
}
else if(hit.transform.tag==“食物”)
{
Eat(hit.transform.gameObject);
}
}

您缺少返回语句

若将return语句放入If、while或for语句中,则它可能返回值,也可能不返回值。如果它不在这些语句中,那么该方法也应该返回一些值(可能为null)。为了确保这一点,编译器将强制您编写位于if、while或for之后的返回语句

但如果您编写if/else块,并且其中每个块都有一个返回值,那么编译器知道if或else将被执行,方法将返回一个值。所以这次编译器不会强迫你

    RaycastHit hit;

        if (Physics.Raycast(HeadBone.position, HeadBone.right, out hit, 1))
        {
            if (hit.transform.tag == "Player")
            {
                NetworkManager.instance.GetComponent<NetworkManager>().CommadSuicide(transform.name);
                return;
            }

            else if (hit.transform.tag == "Enemy")
            {
                NetworkManager.instance.GetComponent<NetworkManager>().KillTarget(hit.transform.name);
                return;
            }

            else if (hit.transform.tag == "Food")
            {
                Eat(hit.transform.gameObject);
            }
        }
raycastthit;
if(物理.光线投射(头骨.位置,头骨.右,外击,1))
{
if(hit.transform.tag==“播放器”)
{
NetworkManager.instance.GetComponent().CommadSuicide(transform.name);
回来
}
else if(hit.transform.tag==“敌人”)
{
NetworkManager.instance.GetComponent().KillTarget(hit.transform.name);
回来
}
else if(hit.transform.tag==“食物”)
{
Eat(hit.transform.gameObject);
}
}

确保敌人身上的标签实际上是敌人,这通常会绊倒我,因为我忘记设置标签。如果这不是问题所在,请在调试器中进行检查,看看它是否在If中运行该行statement@TJWolschon我做了,它是正确的标记。请使用调试工具调试并检查光线是否受到任何碰撞,检查传递给函数的掩码。。。还要检查其他对象是否有碰撞器。如果敌方的If语句得到了正确满足(放入Debug.Log进行简单检查),那么
KillTarget
中肯定存在问题。只是为了确保敌人有一个对撞机/触发器?我不认为这会有帮助吗?在它运行if语句中的行之后,它将退出方法,因此添加返回是多余的。我认为这会有所帮助,因为如果他在击中敌人后不放置返回,它将继续。如果有任何其他代码,它将离开if/else块并在方法中继续,但是从我们已经展示的情况来看,没有其他代码。因此,它将自动返回void,而不必显式地告诉它。我知道你的意思,但是玩家的返回也是多余的?那我就不知道问题出在哪里了。我只是想帮忙。我同意,考虑到我们目前掌握的信息,最初的报税表是多余的。我仍然不知道实际的问题是什么,但是,我们需要更多的信息从OP。