技术分享连载(六)

news/2024/7/20 14:48:08 标签: ui, 游戏, 内存管理

内存管理

Q1:如果一个模型对应Skinned Mesh Renderer实例,那其所占的内存会随着角色增加而增长么 ?

简单地从一个角色Prefab实例化(Instantiate)出多个实例时,Mesh并不会出现多份(这个行为与其他资源是一致的,包括Texture,AnimationClip,Material等等)。如果在内存中发现多份,可以考虑从项目中AssetBundle的加载方式入手,因为即使是同一个AssetBundle中的同一个角色Prefab,如果被反复进行“加载-实例化-卸载”操作,依然是会导致Mesh出现多份的(当然其他的资源也是一样)。


资源管理

Q2:在同一场景里烘培的Lightmap,我用了2张10241024的光照图,大小是5.3MB;别人用了3张10241024的图,大小是4.3MB。请问是什么影响这个光照图的大小,在哪里调?

首先,请确认下Lightmap的类型,Single类型只生成一张,而Dual和Directional会生成两张。 其次,请确认下当前的发布平台,Android下的Lightmap会比Standalone更小。因为不同平台采用的压缩格式不同。此外,Lightmapping中的Lock Atlas,Resolution,Padding等选项也会影响最后烘焙光照图的大小。


NGUI

Q3:NGUI变形,如下图走样了,请问是不是图片压缩导致的?

UWA Tech Doc

当UI纹理在设备上的显示分辨率低于原始分辨率时,会因为出现aliasing现象,导致UI局部变形。通常对于粗线条、块状的UI图素,变形通常是不明显的,但对于细线条的UI图素,则可能非常明显。

通常该问题可以考虑三种方式来改善:

  • 在NGUI中将UIRoot的Scaling Style设置为Flexible,这种方式的好处在于UI纹理不会因为设备分辨率的限制而降低,而缺点在于相同的UI纹理在高分辨率设备上显得比较小,而在低分辨率设备上显得比较大,从而提高了UI布局的复杂度;
  • 将UI纹理的显示分辨率(Sprite的size属性)设定为高于原始分辨率,其缺点在于高分辨率设备上可能会产生模糊,但大多数情况下“模糊”相比于“走样”更不易察觉;
  • 开启UI纹理的Mipmap,从而在低分辨率设备上自动切换到低Level,以“模糊”替换“走样”,但缺点在于增加了纹理的大小,因此只适用于出现了明显变形的少量UI。

图形渲染

Q4:在游戏中,有些Mesh在编辑时候是接收Lightmap的,出于某些原因我们合并了相同的Mesh(材质也相同)。但是发现原先的Lightmap不再影响合并后的Mesh,请问怎么才能实现让合并后的Mesh也接收原先的Lightmap?

如果Lightmap不止一个的话,手动合并Mesh是会出现问题的,因为合并的Mesh烘焙信息很可能出现在不同的Lightmap中,但合并之后的Mesh在渲染时只能使用一个Lightmap,这样uv2读取到Lightmap信息就会出现问题,进而出现这种现象。其实,对于材质相同的Static物体并不需要手动对其Mesh进行combine,因为Unity的Static Batching会自行完成。而如果由于某种特定需求一定要将Mesh进行合并的话,那么也要将其所需要的Lightmap也一并合并,同时改变相应的uv2。不仅如此,Shader中Lightmap也需要进行相应修改,这是比较复杂的,所以我们并不建议这样的做法,因为可能会花掉开发团队大量的开发时间。


资源管理

Q5:我们打出来的ipa包大概有220MB ,相同的资源APK包只有120MB左右, 相差100多MB 。我们查过网上其他已上市游戏的ipa,apk两个包,两个包体都只相差15~30MB,请问我们这种情况是否正常,有没有办法进一步压缩ipa安装包?

首先,放在项目工程Resources文件夹下的文件都会被打包进resources.assets,为了减小发布包的大小,在发布的时候请剔除Resources里以及streamingassets里不必要的文件。

其次Unity有篇官方文档,专门介绍了如何减小发布包的体积。

文末,侑虎君还想提醒大家,请认准www.uwa4d.com(重要的事情说三遍,说三遍)

UWA Tech Doc





原文出处:侑虎科技
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。


http://www.niftyadmin.cn/n/839454.html

相关文章

异常打印出来但是不能捕获

异常在之前就已经捕获了,所以会打印出来,但是你再去捕获,捕获不了。。 错觉就是这个异常捕获不了

proftp mysql_proftp+mysql+quota

安装proftp之前,必须先做一个工作,假如你的mysql是自己编译的,那就必须先修改/etc/ld.so.conf,否则后面运行proftp会报错。vi /etc/ld.so.conf添加下面一行:代码:/usr/local/mysql/lib/mysql注意大家如果mysql的安装路径于我不一样…

Linux- 运维

Linux运维遇到需要使用命令 查看Linux系统有多少用户 cat /etc/passwd | wc -l 查看用户占用的uid,默认情况下,ldap新增的用户和系统本地的用户uid是混在一起。在新建用户时就可以先用一下命令查看哪些uid已经被占用,可以提前做一些计划&…

spring事务(QueryRunner)

注解配置事务 用到的注解 EnableAspectJAutoProxy //开启注解的自动代理 相当于<aop:aspectj-autoproxy /> Pointcut Aspect Before 操作之前 After-returning 操作成功执行 After-Throwing 抛出异常执行 After 最终执行的操作 Around 事务 &#xff1a; 原子性 atomic 一…

分享一套高级Java笔试题(实拍高清图)

分享一套高级Java笔试题 微信群里群友分享的 刚好他在笔试 有些问题不会发到群里求助 如果你最近正好在面试 需要参考需要提升 这套试题或许对你有用 下面是部分分享原图 下面是微信群中群友的热议 非常精彩 讨论的知识点非常有帮助 大牛非常多&#xff01; 所以不会被误导 技术…

finally中return

finally块的语句在 try或catich中的语句 执行之后&#xff0c;return返回之前执行&#xff0c;且finally里的修改语句可能影响也可能不影响try或catch中return的返回值&#xff0c;&#xff0c;若finally里也有return语句&#xff0c;则覆盖try或者catch中的return语句直接返回…

从程序员的角度设计一个Java的神经网络

欢迎大家前往云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 来自维基百科&#xff1a; 人工神经网络&#xff08;ANN&#xff09;或连接系统是受生物神经网络启发构成生物大脑的计算系统。这样的系统通过考虑例子来学习&#xff08;逐步提高性能&#xff09;来完成任务&a…

python3 console input_Python3 tkinter基础 Button command 单击按钮 在console中打印文本

Python : 3.7.0OS : Ubuntu 18.04.1 LTSIDE : PyCharm 2018.2.4Conda : 4.5.11typesetting : Markdowncode"""Author : 行初心Date : 18-10-1Blog : www.cnblogs.com/xingchuxinGitee : gitee.com/zhichengjiu"""import tkinter as tk# 面向对象…