繁体   English   中英

统一隐藏脚本中的 UI 面板

[英]Hiding a UI panel from script in unity

我有一个包含Button作为孩子的 UI Panel 该按钮有一个脚本作为组件。 脚本如下:

public GameObject Panel ;
OnMouseDown()
{
  Panel.setActive(false);

  StartCoroutine(takeShot());
}
private IEnumerator takeShot()
{
   Application.CaptureScreenshot("my_img.png");
 }

我有一个问题说协程无法启动,因为按钮处于非活动状态。

我该如何解决这个问题? 我可以在不使用SetActive(false)的情况下隐藏面板吗?

是的,我假设您使用的是最新版的统一用户界面。

您想利用canvas groups 在您的代码中将canvas group附加到父对象panel ,以访问canvas group component并将其alpha设置为0(无论触发器如何)。 这将隐藏canvas元素及其所有子元素,但仍在场景中处于活动状态。 将其重置为1,使其再次可见。 不幸的是,您仍然可以与它进行交互,因为从技术上讲,它仍然在现场,因此可以通过使用Renderer.enabled并将其设置为false来解决此问题。 这会更新它,但不会绘制它。 SetActive完全停止它。

希望这可以清除一切。

我一直在同一个问题作斗争一段时间。 但是,我采用了具有相同效果的不同答案。 我所做的是访问RectTransform组件,然后通过按比例缩小将其隐藏。

    public RectTransform Panel;

        void Update ()
        {       
            if(Input.GetButtonUp("Fire1"))
            {            
                Panel.localScale = new Vector3(1, 1);
            }
            if(Input.GetButtonUp("Fire2"))
            {
                Panel.localScale = new Vector3(0, 0);
            }   
}

对于不使用SetActive( ) 方法隐藏 Unity3D 中的任何组件,您可以将对象的比例设置为零。

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class HidePanelDemo: MonoBehaviour
{
    public RectTransform panelObject;

    // Start is called before the first frame update
    void Start() {
        panelObject.localScale = new Vector3(0,0,0);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM