[英]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.