2017-06-22 43 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