如何从OnGui()中删除2d纹理

时间:2016-12-28 07:49:44

标签: c# unity3d

我想清除图像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将被禁用。

1 个答案:

答案 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系统中的ImageRawImage组件执行此操作,然后启用或禁用它。

获取 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;
        }
    }
}

您也可以使用imageDispnull设置为imageDisp = null;,但这不是必需的。