簡體   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