Unity在运行时,将Texture2D转换成Sprite格式

由于Image和Button的图片要求是Sprite类型的,当有大量图片时,一个一个的操作不方便,所以考虑动态的将jpg或png图片进行转换格式。

运行时,将Texture2D转换成Sprite格式

 

核心方式:WWW.LoadImageIntoTexture 加载图像到纹理

 

这里我用一个按钮来操作:

IEnumerator Load(string path)
    {
        WWW www = new WWW(path);
        yield return www;
        if (!string.IsNullOrEmpty(www.error))
        {
            Debug.Log(www.error);
        } else{
            if (www.isDone)
            {
                Texture2D tex = new Texture2D(64, 64);
                www.LoadImageIntoTexture(tex);
                Sprite sprite = Sprite.Create(tex, new Rect(0, 0, 64, 64), Vector2.zero);
                GameObject btngo = GameObject.Find("Button");
                if (btngo)
                {
                    btngo.GetComponent().sprite = sprite;
                }
            }
        }
    }

 

调用:

        StartCoroutine(Load("file://" + Application.persistentDataPath + "/Folder/File.jpg"));

 

 

 

Unity新的Web请求方式(UnityWebRequest):

题外话:System.Uri是一个很好的东西

  IEnumerator RequestTexture(System.Uri url)
  {
        UnityWebRequest request = UnityWebRequest.GetTexture(url.AbsoluteUri);
        yield return request.Send();
        if (request.isError)
        {
            Debug.LogError(request.error);
            yield break;
        }
        if(request.isDone)
        {
            Texture2D texture = ((DownloadHandlerTexture)request.downloadHandler).texture;
            // Texture2D texture2 = DownloadHandlerTexture.GetContent(request); //使用helper getter获取,该方法与上一句方法效果相同
            Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
            if (image != null)
                image.sprite = sprite;
        }
  }

 

 

你可能感兴趣的:(unity)