所以我有一个名为menuView
的游戏对象。我创建了toogleGameobject
的脚本,它很简单 - 检查它是否为selfActive
,如果它被设置为false,如果为false,则将其设置为true。问题是由于某种原因它无法正常工作。然后在该函数内部设置Debug.Log(selfActive)
并在我的控制台中返回它是真的但我的游戏对象是假的。
我按钮和脚本调用脚本需要参数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);
}
}
答案 0 :(得分:3)
小心如何命名变量。有一个本地变量继承自MonoBehaviour
和Component
,名为" 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);
}