Unity异步加载外部图片

Unity异步加载外部图片


因项目需要使用Unity加载外部纹理资源,图片资源多,且图片较大。
Unity提供的WWW / UnityWebRequest加载纹理时并非使用异步加载,导致应用卡顿。
也没有搜索到相关的插件,所以决定自己撸。

话不多说,先上菜。


插件下载地址:

https://github.com/xingfa-peng/UnityTextureLoader


支持平台以及图形API

Windows :
Architectures : x86_64
GrapicsAPI: Direct3D11

Android :
Architectures : armv7, arm64
GrapicsAPI: OpenGLES2、OpenGLES3

iOS : 后续加入


支持的图片类型

图片加载采用 stb_image
支持的类型有:JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC


加载的纹理属性:

Texture2D
格式:RGBA
无 mipmap


代码
// void LoadAsync(string fileName, Action<Texture2D> onLoadSucceed, Action onLoadFailed);

class TextureLoaderTest : MonoBehaviour
{
	// 用于持有加载完成的对象
	Inking.Texture2D _texture2D;
	
	void LoadTexture(string fileName)
	{
		Inking.TextureLoader.Instance.LoadAsync(fileName,
                (texture2D) =>
                {
                    Debug.Log("Load Texture Succeed : " + fileName);
					// todo...
					
					// 转换为 Unity.Texture2D
					var texture = texture2D.ToUnityTexture2D();
					
					// 持有加载后的对象,当该对象未被持有时,GC后会被释放。
                    _texture2D = texture2D;
                },
                () =>
                {
                    Debug.LogError("Load Texture Failed : " + fileName);
                });
	}
}


注意:
Inking.TextureLoader 不持有任何资源对象,即,若指定同一资源会再次加载。
加载后的Inking.Texture2D 对象必须被持有,否则会在GC后被释放,加载的资源也会被释放。


查看或修改源码

源码基于MIT开源协议,可以随意使用并修改
需要了解或掌握以下知识:
语言:c, c++,c#
工具: Cmake ,vs, Unity, xcode
平台: Windows, Android, iOS
图形API:D3D11, OpenGLES2, OpenGLES3, EGL(Android), EAGL(iOS)


  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值