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
Unity3d 重写Equals()会破坏与null的比较吗?_Unity3d_Equals - Fatal编程技术网

Unity3d 重写Equals()会破坏与null的比较吗?

Unity3d 重写Equals()会破坏与null的比较吗?,unity3d,equals,Unity3d,Equals,我不太确定我做错了什么,特别是因为我正在重新实现一些我以前工作得很好的东西,特别是用于寻路的AStar算法。我正在使用C#并在团结一致的情况下工作。我以前的实现和当前实现的主要区别在于,我以前在Unity中将导航节点作为独立的游戏对象,现在它们只是3d数组中的类实例。我遇到的第一个意外障碍是,这次我必须重写Equals()方法,以便List.Contains()能够正确响应所检查的不同节点(以前不需要)。覆盖有帮助,但后来我发现自己陷入了一个相当奇怪的问题(至少在这一点上对我来说)。现在有一段代

我不太确定我做错了什么,特别是因为我正在重新实现一些我以前工作得很好的东西,特别是用于寻路的AStar算法。我正在使用C#并在团结一致的情况下工作。我以前的实现和当前实现的主要区别在于,我以前在Unity中将导航节点作为独立的游戏对象,现在它们只是3d数组中的类实例。我遇到的第一个意外障碍是,这次我必须重写Equals()方法,以便List.Contains()能够正确响应所检查的不同节点(以前不需要)。覆盖有帮助,但后来我发现自己陷入了一个相当奇怪的问题(至少在这一点上对我来说)。现在有一段代码给我带来了问题:

public static List<Vector3> PrintPath (ref NavNode node, ref NavNode caller)
    {
            caller.parent = null;
            List<Vector3> temp = new List<Vector3> ();
            NavNode tempNode = node;
            Debug.Log(tempNode.parent.parent.parent.position);
            while (tempNode.parent!=null) {
                    temp.Add (tempNode.position);
                    Debug.Log (tempNode.position);
                    tempNode = tempNode.parent;
            }
            temp.Add (tempNode.position);
            temp.Reverse();
            return temp;
    }

有人知道我可能做错了什么吗?花了几个小时试图弄明白这一点,任何帮助都将不胜感激。

毕竟我自己已经设法弄明白了这一点。如果有人遇到类似的问题,这里有一个解释:事实上,我在第一个实现中将节点作为独立的游戏对象组件,而在第二个实现中,它们只是数组中的实例,这一点造成了差异。显然,每次脚本扩展Monobehavior时,都需要将其用作游戏对象组件,以便正常运行。一旦我从新的NavNode类中删除了Monobehavior扩展,我就不再需要重写Equals()方法,默认方法开始正常工作。结果,导致我出现问题的空检查也开始正常工作

    public override bool Equals(System.Object obj)
{
    if (obj == null)
    {
        return false;
    }
    NavNode node = (NavNode)obj;
    if ((System.Object)node == null)
    {
        return false;
    }
    return (node.position.x == position.x) && (node.position.y == position.y) && (node.position.z == position.z);
}

public override int GetHashCode()
{
    return base.GetHashCode();
}