一、简单介绍
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); -
} -
} -
}

6791

被折叠的 条评论
为什么被折叠?



