我正在尝试将对象传递给方法。在通话之前,我检查它是否为空,但事实并非如此。在方法内部,对象为null,我不知道为什么。
public class WorldManager : MonoBehaviour {
private Mesh mesh;
private List<int> triangles;
private List<Vector3> vertices;
// Use this for initialization
void Start () {
mesh = GetComponent<MeshFilter>().mesh;
OctreeNode rootNode = new OctreeNode (1, new Vector3(0f,0f,0f), 16);
Octree octree = new Octree (rootNode);
DualContouring contour = new DualContouring ();
vertices = octree.vertices;
if (rootNode == null) {
Debug.Log ("Node is null"); //It's not
} else {
Debug.Log (rootNode.type);
}
triangles = contour.ContourOctree (rootNode);
mesh.Clear ();
mesh.vertices = vertices.ToArray ();
mesh.triangles = triangles.ToArray ();
mesh.Optimize ();
mesh.RecalculateNormals ();
}
public class DualContouring {
VoxelModel VoxelModel = new VoxelModel();
int MATERIAL_SOLID = 1;
int MATERIAL_AIR = 0;
List<int> triangles = new List<int>();
byte Node_Internal = 1;
byte Node_Psuedo = 2;
byte Node_Leaf = 3;
public List<int> ContourOctree(OctreeNode node){
if (node==null) {
Debug.Log ("Now it's null");
}
ContourCellProc (node);
return triangles;
}
到目前为止,我可以访问属性,并且该对象不为null。有问题的变量“节点”正在传递而没有任何问题。它被传递给同一个类中的方法,该方法为null。
void ContourCellProc(OctreeNode node)
{
if (node == null) // True
{
Debug.Log ("It is null");
return;
}
现在我无法访问该对象,它是null,我不知道为什么。我没有得到它,它只被传递。问题是什么?
答案 0 :(得分:0)
检查您的条件 - 意外使用=
代替==
会导致空对象。
还要注意,给定的代码将在调试行之后传递一个空对象 - 确保您没有错过else
语句,并确切知道分支的设计目的。< / p>
这有时可能是多线程访问的结果,如果您正在访问由多个线程访问的对象中包含的对象 - 看到对象是直接传递而不是通过引用传递(ref
),情况不太可能如此。