c# - activeSelf 返回 true 且 gameobject 为 false

标签 c# unity3d

所以我有一个名为 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);
    }
}

这里我分配并调用游戏对象:Image

最佳答案

请注意变量的命名方式。有一个局部变量继承自 MonoBehaviourComponent 名为“gameObject”。

您使用 gameObject 来引用此脚本附加到的游戏对象。

脚本附加到的 GameObject 是您当前正在打开/关闭的对象,不是传递给 toogleGameObject 函数的对象。

传递给 toogleGameObject 函数的 GameObject 被命名为 gameobject 而不是 gameObjectO 没有大写。

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

关于c# - activeSelf 返回 true 且 gameobject 为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44692366/

相关文章:

c# - Vuforia 一张图片定位多张图片

c# - 使用协程淡入/淡出 TextMeshPro 文本元素

c# - 在java中读取c#二进制文件

unity3d - 如何减少 Unity 包的大小

c# - 在 C# 中定位安装程序路径

c# - 登录到Azure Web应用程序失败并显示“AADSTS50079:要求用户使用多因素身份验证”

C# 和 SWI-Prolog - 将字符列表转换为事实列表

c# - 单元测试未涵盖 LINQ `Any`

c# - 一个方法返回一个元组,C#中如何给取元组结果的两个变量赋值

c# - 使用优先级队列时工作线程性能降低