2017-06-22 73 views
0

所以我有gameobject叫menuView。我創建了腳本toogleGameobject,它很簡單 - 檢查它是否爲selfActive,如果它被設置爲false,並且它爲false,則將其設置爲true。問題是,由於某種原因,它無法正常工作。然後在這個函數裏我設置了Debug.Log(selfActive),並在我的控制檯中返回,它是true,但是我的gameobject是false。activeSelf return true and gameobject is false

這裏是圖像: image

我打電話的按鈕和文字腳本需要參數gameObject所以我給它分配通過檢查。

public void toogleGameObject(GameObject gameobject) 
{ 
    Debug.Log(gameobject + " " + gameObject.activeSelf); 

    //In image above this down was under comment, so only Debug.Log was caled with function 
    if(gameObject.activeSelf == true) 
    { 
     gameObject.SetActive(false); 
    } 
    else 
    { 
     gameObject.SetActive(true); 
    } 
} 

在這裏,我分配並調用遊戲對象:Image

+0

如果你想得到一些幫助,你將不得不提供更多的代碼。我們將需要用於切換遊戲對象和您附加到按鈕的偵聽器的代碼。也許,'Debug.Log'已經被放置**之前**你切換gameobject狀態。 – Hellium

+0

@Hellium我編輯它。我還注意到,在上面的圖像中,這個下來是受到了評論,所以只有Debug.Log是用函數 –

+0

來實現的。從哪裏調用到googleGameObject以及如何將MenuView引用到它是很重要的?你能分享這些代碼嗎? – Cenkisabi

回答

3

小心你如何命名變量。有一個從MonoBehaviourComponent繼承的局部變量名爲「gameObject」。您使用gameObject來引用此腳本附加到的GameObject。

這遊戲對象的腳本被附加到目前你切換什麼/ FF 傳遞到toogleGameObject功能之一。

傳遞到toogleGameObject功能的遊戲對象被命名爲gameobjectgameObject .The Ø沒有大寫。

public void toogleGameObject(GameObject gameobject) 
{ 
    Debug.Log(gameobject + " " + gameobject.activeSelf); 

    //In image above this down was under comment, so only Debug.Log was caled with function 
    if(gameobject.activeSelf == true) 
    { 
     gameobject.SetActive(false); 
    } 
    else 
    { 
     gameobject.SetActive(true); 
    } 
} 

你也可以簡化這個到:

public void toogleGameObject(GameObject gameobject) 
{ 
    Debug.Log(gameobject + " " + gameobject.activeSelf); 
    gameobject.SetActive(!gameobject.activeSelf); 
} 

最後,我建議你參數變量重新命名,以GameObject gameobject這樣GameObject objToToggle,你不會再犯這個錯誤的未來。

public void toogleGameObject(GameObject objToToggle) 
{ 
    Debug.Log(objToToggle + " " + objToToggle.activeSelf); 
    objToToggle.SetActive(!objToToggle.activeSelf); 
} 
+0

這是不正確的。即使你對「gameObject」是錯誤的命名是正確的,因爲基類也有一個名爲gameObject的變量,這段代碼不會調用它。它總是在最接近的範圍內調用變量。在這段代碼中,它不是基類的變量。它是函數的參數。 你甚至可以在日誌中看到這一點。將打印的遊戲對象記錄爲MenuView。 – Cenkisabi

+3

@Cenkisabi:檢查Debug.Log:'gameobject +「」+ gameObject。activeSelf'你看到第一個小寫的'o'(引用參數),而另一個作爲大寫的'O'(引用劇本附加到的gameobject) – Hellium

+1

@Cenkisabi我不認爲你理解我的答案。我建議你在再次投降之前再讀一遍。 'toogleGameObject'函數是爲了在作爲參數傳遞給它的GameObject('gameobject'變量)上進行操作,但OP的原始代碼正在修改該腳本所附的GameObject,因爲OP使用'gameObject'而不是'gameobject '在這個功能。基本上,該函數參數現在沒用了,因爲如果您將任何GameObject傳遞給它,該函數將不會在該GameObject上工作,而是會在該腳本所附帶的GameObject的 – Programmer

0

如我所料,你叫Debug.Log之前切換你的遊戲對象,因此,通知的debug.log您的遊戲物體的相反狀態(因爲你改變權後的狀態)。

public void toogleGameObject(GameObject gameobject) 
{ 
    //Debug.Log("Before toggle : " + gameobject + " " + gameobject.activeSelf); 

    gameobject.SetActive(!gameobject.activeSelf); 

    Debug.Log("After toggle : " + gameobject + " " + gameobject.activeSelf); 
} 
+0

在我的場景開始時,我禁用了這個對象,並且我只設置了debug.log行的功能(不改變它的選擇性),並在圖像上顯示結果。在層次結構中,你可以看到它被禁用,但調試日誌說它是活動的 –

+0

然後我猜@程序員的答案是好的,你弄亂了變量的名字('gameobject'!='gameObject') – Hellium