activeSelf返回true,gameobject为false

时间:2017-06-22 07:03:45

标签: c# unity3d unity5

所以我有一个名为menuView的游戏对象。我创建了toogleGameobject的脚本,它很简单 - 检查它是否为selfActive,如果它被设置为false,如果为false,则将其设置为true。问题是由于某种原因它无法正常工作。然后在该函数内部设置Debug.Log(selfActive)并在我的控制台中返回它是真的但我的游戏对象是假的。

这是图片: 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);
    }
}

在这里我分配并调用gameobject:Image

2 个答案:

答案 0 :(得分:3)

小心如何命名变量。有一个本地变量继承自MonoBehaviourComponent,名为" gameObject"。

您使用gameObject来引用此脚本所附加的GameObject。

脚本附加到的GameObject是您当前切换到/ ff 传递给toogleGameObject函数的那个​​。

传递给toogleGameObject函数的GameObject名为gameobject而非gameObject O 未大写。

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);
}

答案 1 :(得分: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);
}