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)