Unity实用小工具或脚本—加载外部图片的三种方式

本文探讨了在Unity中加载外部图片的三种方式:使用WWW、C# IO流转换为Texture2D以及Assetbundle打包加载。前两种方式可能导致卡顿,而Assetbundle方式在加载过程中保持流畅,尽管有短暂停滞,但总体表现最佳。
摘要由CSDN通过智能技术生成
一、前言
        项目上需要加载多个地图,每个地图的贴图将近 200M ,所有地图加起来贴图将近 2G 。因此,想着能不能将贴图放到工程外加载,逐研究了一下,得出了三种加载方式,分别是 WWW 加载、 C# 原生的 IO 加载在转换成 Texture2D Assetbundle 打包和加载。
        前面两种方式都会存在卡顿现象,因为最消耗性能的计算方式最终都还是放在主线程里。尽管第二种方式可以使用另外一个线程加载图片成 Bytes 数组,但是将字节数组转成成 Texture2D 还是在主线程里,而这个过程在图片 5M 的时候还是很卡顿,何况我的地形贴图每张有 20M 左右。对于前面两种方式没有找到任何其他好的优化方式来解决。第三种方式是我用到最理想的,在加载的过程中不会有卡顿。
二、 WWW 加载
首先,获取当前工程同目录下的“MapImages”文件夹路径,然后获取每张图片的全部路径,并将路径存到列表中。
[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
   /// <summary>
     /// 获取当前物体应该读取的地形贴图的文件的路径
     /// </summary>
     /// <returns></returns>
     private string GetFilePath()
     {
         string [] strTempPath = Application.dataPath.Split( '/' );
         string strPath = string .Empty;
         //去掉后面两个,获取跟工程相同目录的路径,如“E:/ZXB/MyProject/Asset/",去掉后面两个就得到和工程同级的目录为:“E:/ZXB”
         for ( int i = 0; i < strTempPath.Length-2; i++)
         {
             strPath += strTempPath[i] + "/" ;
         }
         //加上整个地形贴图的文件命
         strPath += TERRAINMAP_FILENAME + "/" ;
         //最后加上当前文件夹的名称,最后的文件夹名称和当前物体的名称一致
         strPath += gameObject.name + "/" ;
 
         return strPath;
}
     /// <summary>
     /// 获取所有地图贴图文件路径
     /// </summary>
     /// <param name="info"></param>
     private void GetAllFile(FileSystemInfo info)
     {
         if (!info.Exists)
         {
             Debug.Log( "该路径不存在!" );
             return ;
         }
         DirectoryInfo dir = info
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值