我想清除图像img1。
我有一个void OnGui()
,其中我从服务器加载图像作为屏幕
保护程序。
触摸屏幕后,我需要删除图像,这意味着我需要 停用图像纹理。
void OnGUI()
{
GUILayout.Label(img1);
foreach (UnityEngine.Touch touch in Input.touches)
{
CancelInvoke(methodName : "ChangeImage");
img1.enabled=false;//but this line doesn't work
}
}
我从服务器加载img1
..将出现
仅在30秒无效后。
如何在foreach内部img1
停用,这样当我触摸屏幕时,屏幕保护程序img1
将被禁用。
答案 0 :(得分:1)
Texture2D
是一个类/对象,而不是一个组件,因此您无法使用img1.enabled=false
禁用它。
只需在boolean
周围包裹GUILayout.Label(img1);
变量即可。当屏幕上有触摸时,应该将此布尔变量切换为false
。
public Texture2D img1;
bool showImage = true;
void OnGUI()
{
if (showImage)
{
GUILayout.Label(img1);
}
for (int i = 0; i < Input.touchCount; ++i)
{
if (Input.GetTouch(i).phase == TouchPhase.Began)
{
CancelInvoke(methodName: "ChangeImage");
showImage = false;
}
}
}
现在,这是错误的,因为您在Unity中使用了错误的GUI( IMGUI )。您应该使用 uGUI 这是新的Unity UI。
您可以使用新UI系统中的Image
或RawImage
组件执行此操作,然后启用或禁用它。
获取 GameObject - &gt; UI - &gt; RawImage 。使用下面的代码并将RawImage拖到imageDisp
插槽。
public RawImage imageDisp;
public Texture2D img1;
void Update()
{
for (int i = 0; i < Input.touchCount; ++i)
{
if (Input.GetTouch(i).phase == TouchPhase.Began)
{
CancelInvoke(methodName: "ChangeImage");
imageDisp.enabled = false;
}
}
}
您也可以使用imageDisp
将null
设置为imageDisp = null;
,但这不是必需的。