问题描述
(C#/ Unity的新手,所以这可能是一个愚蠢的问题,有一种简单的解决方法)
每当我用枪装ADS时,我都试图隐藏用作十字线的画布。我已经搜索了如何执行此操作,但在ADSing时它仍然没有隐藏画布。
if (ISADS == true) //if ADS is true
{
Debug.Log(ISADS);
GameObject.Find("AK-47").GetComponent<Canvas>().enabled = false; //hide the canvas (The crosshair)
GameObject.Find("Pistol").GetComponent<Canvas>().enabled = false; // same with Pistol
GameObject.Find("870_Shotgun").GetComponent<Canvas>().enabled = false; // same with Shotgun
}
else
{
Debug.Log(ISADS);
GameObject.Find("AK-47").GetComponent<Canvas>().enabled = true; //else (if you're not ADSing) show the canvas
GameObject.Find("Pistol").GetComponent<Canvas>().enabled = true; // same with Pistol
GameObject.Find("870_Shotgun").GetComponent<Canvas>().enabled = true; // same with Shotgun
}
解决方法
有两种建议的方法:
-
设置
gameObject.SetActive(false)
-
或将CanvasGroup组件添加到Canvas。然后,您可以编辑3个不同的值,分别称为alpha,intractable和blockraycast。 IE
GameObject.Find("AK-47").GetComponent<CanvasGroup>().alpha = 0
您的代码是否在更新功能内?如果没有,那可能就是为什么您的编码无法正常工作的原因。它应该可以在启动功能上运行,但出于故障排除的目的,建议让它在更新功能内运行。
还有其他游戏对象的AK-47,手枪和870_Shotgun儿童游戏对象吗?这可能就是为什么使用gameobject.find()无法找到团结的原因。 Unity试图在同一级别上找到游戏对象,而您正在通过脚本进行调用(如果有意义)。
我建议使用以下伪代码
gameobject.find(“ this.gameobject / child / grand-child”)
或者您可以使用transform.find()使其更容易。让我知道它是否有效。