Unity 基礎之 實現動態加載網絡端、PC端和 Android 端指定路徑下的圖片的簡單方法

 

 

Unity 基礎之 實現動態加載網絡端、PC端和 Android 端指定路徑下的圖片的簡單方法

 

目錄

路徑Unity 基礎之 實現動態加載網絡端、PC端和 Android 端指定路徑下的圖片的簡單方法

一、簡單介紹

二、實現原理

三、注意事項

四、效果預覽

五、實現步驟

六、關鍵代碼


 

一、簡單介紹

Unity中的一些基礎知識點,便於後期查看學習。

本節介紹,如何動態加載網絡上,電腦上或者Android手機上指定路徑的圖片的簡單方式,方法不唯一,僅供參考。

 

二、實現原理

1、UnityWebRequest 發起網絡請求,DownloadHandlerTexture 作爲發起下載圖片,解析得到圖片

2、下載地址不僅支持網絡路徑,電腦端和Android 手機端等路徑也支持

 

三、注意事項

1、移動端,例如 Android 注意請給讀寫權限

2、因爲要加載網絡服務器上的圖片,還需要網絡開啓哈

 

四、效果預覽

 

五、實現步驟

1、打開Unity,新建工程

 

2、在場景上佈局UI,顯示加載的圖片

 

3、新建腳本,編輯代碼,把腳本掛載到 UI上,勾選是加載網絡圖片,還是電腦Android上的圖片

 

4、注意,Android 注意 給讀寫權限

 

5、運行效果如上

 

六、關鍵代碼

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LoadPicture : MonoBehaviour
{

    public bool isLoadNetImage = false;

    [SerializeField]
    // 網絡上的圖片,也可以加載
    private string url = @"http://a2.att.hudong.com/36/48/19300001357258133412489354717.jpg";
    RawImage rawImage;

    public string Url { get => url;
        set {
            url = value;
            GetTexture(url, SetTexttureToRawImage);
        }
    }

    private void Start()
    {
        rawImage = GetComponent<RawImage>();

        if (isLoadNetImage)
        {
            // 加載網絡服務器的圖片
            GetTexture(url, SetTexttureToRawImage);
        }
        else {

#if UNITY_EDITOR
            // 加載PC端上的圖片
            GetTexture(@"D:\Tmp\Images\HappFish.png",
                SetTexttureToRawImage);
#else
        // 加載Android端的圖片
        GetTexture(@"file:///storage/emulated/0/tencent/MicroMsg/WeiXin/mmexport1537166579555.jpg",
            SetTexttureToRawImage);
#endif

        }
                       
    }

    void SetTexttureToRawImage(Texture texture)
    {
        if (rawImage ==null)
        {
            rawImage = GetComponent<RawImage>();
        }
        rawImage.texture = texture;
    }

    /// <summary>
    /// 請求圖片
    /// </summary>
    /// <param name="url">圖片地址,like 'http://www.my-server.com/image.png '</param>
    /// <param name="action">請求發起後處理回調結果的委託,處理請求結果的圖片</param>
    /// <returns></returns>
    public void GetTexture(string url, Action<Texture2D> actionResult)
    {
        StartCoroutine(_GetTexture(url, actionResult));
    }

    /// <summary>
    /// 請求圖片
    /// </summary>
    /// <param name="url">圖片地址,like 'http://www.my-server.com/image.png '</param>
    /// <param name="action">請求發起後處理回調結果的委託,處理請求結果的圖片</param>
    /// <returns></returns>
    IEnumerator _GetTexture(string url, Action<Texture2D> actionResult)
    {
        UnityWebRequest uwr = new UnityWebRequest(url);
        DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
        uwr.downloadHandler = downloadTexture;
        yield return uwr.SendWebRequest();
        Texture2D t = null;
        if (!(uwr.isNetworkError || uwr.isHttpError))
        {
            t = downloadTexture.texture;
        }
        else
        {
            Debug.Log("下載失敗,請檢查網絡,或者下載地址是否正確 ");
        }

        if (actionResult != null)
        {
            actionResult(t);
        }
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章