如何通过C#Unity中的代码隐藏画布

问题描述

(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
    }

解决方法

有两种建议的方法:

  1. 设置gameObject.SetActive(false)

  2. 或将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()使其更容易。让我知道它是否有效。