2015-05-05 52 views
-2

我正在嘗試將對象傳遞給方法。在通話之前,我檢查它是否爲空,而不是。在方法內部,對象爲null,我不知道爲什麼。傳遞給方法後的對象爲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。有問題的變量「節點」正在傳遞,沒有任何問題。它被傳遞給同一個類中的方法,它是空的。

void ContourCellProc(OctreeNode node) 
{ 
    if (node == null) // True 
    { 
     Debug.Log ("It is null"); 
     return; 
    } 

現在我無法訪問該對象,它是空的,我不知道爲什麼。我不明白,它只是被傳遞了。問題是什麼?

+0

節點變量是否可以從其他線程訪問? –

+2

你能製作一個實際編譯和演示你的問題的小樣本嗎? –

+3

此代碼看起來不錯;在我們沒有看到的代碼中發生了一些事情。你能分享更多你的節目嗎? – adv12

回答

0

檢查您的條件 - 意外使用=代替==可能會導致空對象。

另外請注意,給出的代碼會在調試行之後傳遞一個空對象 - 確保您不會錯過else語句,並且您確切知道分支的設計目的。

這有時可能是多線程訪問的結果,如果您正在訪問包含在多線程訪問的對象中的對象 - 看到該對象正在直接傳遞而不是通過引用(ref)傳遞,則這不太可能就是這樣。

+1

在調試器中仔細地仔細觀察,在每一步看變量的值。 –

+0

檢查所有「=」,一切都很好。事情是在「else」之後傳遞的對象不是null。第二課也沒有通過對象。在「ContourCellProc」方法中只有null。 – user3723018