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);
}
}
}