C# GameObject没有';t返回正确的布尔值

C# GameObject没有';t返回正确的布尔值,c#,unity3d,C#,Unity3d,我在c#中创建了一个名为Tile的类,该类具有一个布尔属性,当我尝试通过方法getIsWall()访问它时,我总是得到True。附上代码 在开始之前,我使用createTile()方法生成一个100x100格的游戏对象,对于“墙”,我将isWall设置为true,对于“免费”tiles,我将isWall设置为false。(见方法) 然后在generateAisle方法中,我想创建一个向北的过道(对于调试案例,强制方向=1),并使用方法checkIfWall()检查3个瓷砖是否为墙。当我这样做时,

我在c#中创建了一个名为
Tile
的类,该类具有一个布尔属性,当我尝试通过方法
getIsWall()
访问它时,我总是得到
True
。附上代码

在开始之前,我使用
createTile()
方法生成一个100x100格的游戏对象,对于“墙”,我将
isWall
设置为
true
,对于“免费”tiles,我将
isWall
设置为
false
。(见方法)

然后在
generateAisle
方法中,我想创建一个向北的过道(对于调试案例,强制方向=1),并使用方法
checkIfWall()
检查3个瓷砖是否为墙。当我这样做时,我总是返回
TRUE
,但我知道有时一个磁贴是
FALSE
(在游戏运行时检查)

有人能帮我吗?谢谢

public void generateAisle(int x, int z, int lengthAisle){
    bool free = false;
    bool free2 = false;
    bool free3 = false;
    int direction = 1;//Random.Range (1, 4);
        if (direction == 1) {//north
            int tempZ = z+1;
            for (int i=0; i<lengthAisle; i++) {
                free = checkIfWall (x, tempZ+i);
                free2 = checkIfWall ((x-1), tempZ+i);
                free3 = checkIfWall ((x+1), tempZ+i);
                if(!free || !free2 || !free3){
                    free = false;
                    break;
                }
            }
            if(free){
                for (int i=0; i<lengthAisle; i++) {
                    /*Destroy(GameObject.Find("Tile"+x+"."+(tempZ+i)));
                    createTile(x,z+i,"Free");*/
                }
            }
        } else if (direction == 2) {//south
            int tempZ = z-1;
            for (int i=0; i<lengthAisle; i++) {
                free = checkIfWall (x+i, tempZ);
                free2 = checkIfWall (x-1+i, tempZ);
                free3 = checkIfWall (x+1+i, tempZ);
                if(!free || !free2 || !free3){
                    free = false;
                    break;
                }
            }
            if(free){
                for (int i=0; i<lengthAisle; i++) {
                    Destroy(GameObject.Find("Tile"+x+"."+(tempZ+i)));
                    createTile(x,z+i,"Free");
                }
            }
        } else if (direction == 3) {//east
            for (int i=0; i<lengthAisle; i++) {
                free = checkIfWall (x, z + i);
            }
        } else if (direction == 4) {//west
            for (int i=0; i<lengthAisle; i++) {
                free = checkIfWall (x, (z - i));
            }
        }
}
private bool checkIfWall(int x, int z){
    Debug.Log (GameObject.Find ("Tile" + x + "." + z).GetComponent<Tile> ().getIsWall());
    if (GameObject.Find ("Tile" + x + "." + z) != null) {
        Debug.Log ("Tile" + x + "." + z + " = " + GameObject.Find ("Tile" + x + "." + z).GetComponent<Tile> ().getIsWall());
        if (GameObject.Find ("Tile" + x + "." + z).GetComponent<Tile> ().getIsWall()) {
            return true;
        } else {
            return false;
        }
    }else {
        return false;
    }
}

public void createTile(int x, int z, string kind="Wall"){
    GameObject newTile = (GameObject)Instantiate(Resources.Load(kind, typeof(GameObject)));
    newTile.name = "Tile"+x+"."+z;
    newTile.gameObject.GetComponent<Tile>().setPosition(x,z);
    if (kind == "Wall") {
        newTile.transform.position = new Vector3 (x, 1, z);
        newTile.GetComponent<Tile>().setWall(true);
    }else{
        newTile.transform.position = new Vector3 (x, 0, z);
        newTile.GetComponent<Tile>().setWall(false);
    }
}
public void generateAisle(int x、int z、int lengthAisle){
布尔自由=假;
bool-free2=假;
bool-free3=假;
int direction=1;//Random.Range(1,4);
如果(方向==1){//北
int tempZ=z+1;

对于(int i=0;i在@learncos2d的建议之后,我删除了所有的“GameObject.Find()”,只返回在createTile()中创建的互动程序并将引用存储在数组中。然后在需要时,我检查存储的游戏对象是否是墙。

发布getIsWall函数。请注意,频繁执行Find并使用+附加字符串效率很低。您应该“查找”只需返回一次对象并将其存储在局部变量中,而不是构造字符串并反复查找它如果/else返回true/false取决于getIsWall是否返回true/false。你对checkIfWall方法的看法是正确的,这不是一个好的解决方案,我将尝试简化。然后我将按照你的建议,在创建游戏对象时,我将把对游戏对象的引用保存在数组中!