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