Q&A——资源管理(一)

Unity资源管理(一)         序:之前有接做过打包的工作,但是一直也没有整理下来,现在整理一下资源管理相关的顺便整理一下吧。 Resources:Assets目录下面新建Resources文件夹,其中的所有资源,不论是否被场景用到,都会被打包到游戏中。 资源加载方式: 1.Resources.Load:加载Resources目录的一个asset 2.Resources.LoadAsync:Resource... 阅读详情

资源管理

Q1:iOS上PVRTC不支持NPOT的贴图压缩,在Android上可以用ETC2,但在iOS上不能压缩,内存消耗大。请问在iOS上有没有好的处理方案?

ETC2仅能在支持OpenGL ES3.0的手机上进行使用,请研发团队在使用前谨慎考察支持ES3.0的手机在国内的覆盖范围。
PVRTC不支持NPOT的贴图压缩,这是Apple规定的,上层应用无权对此更改。我们仅能建议将纹理尽可能做成POT形式,否则只能接受内存较大的开销,没有其他更好的办法。

资源管理

Q2:Unity对Dynamic Batching的数量是否有限制?或者说对Saved by Batch的数量是否有限制?

Unity对于任何Mesh的面片都有65536的个数限制,拼合后的面片数也是如此。

资源管理

Q3:请问游戏中特效使用的很多贴图, 一般有什么好的方式去管理吗 ? 不合并图集的话会有上千张小的透明贴图, 合并图集又会有占用内存过多的问题。

可以合并成Atlas,一般将尽可能同时出现频率较高的Texture合成Atlas,这样并不会造成内存过大。在这方面也可以参考我们前不久推荐的插件Mesh Baker。

资源管理

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

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

资源管理

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

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

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

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

UWA Tech Doc


资源管理

Q6:下图一是刚进游戏时获取的信息,第二张是开关几次同一个UI界面后获取,对比两图我们发现有多份重复的Texture。请问这是为什么?我们的加载方式是UI通过AssetBundle加载,加载后会释放AssetBundle,然后再次加载 UI 就会造成纹理资源的冗余。
UWA Tech Doc
UWA Tech Doc

  • 刚进游戏时获取的图中出现的“重复”资源可能并不是冗余,因为 Atlas的一个 Group 中可能包含多张一样大小的Page(即纹理),而这几个Page在内存中的名字是一样的。

  • 但是,如果同一UI界面多次开启后,内存中出现了更多同样的资源,则说明UI的管理方式存在一定问题。对于频繁使用的UI,我们建议在加载之后通过缓冲池对其进行缓存,后续使用时,直接通过缓冲池获取即可。而不要每次均通过AssetBundle进行加载,这种做法既会造成更大的CPU占用,同样会很大几率造成资源的冗余。

  • 同时,如果多次开启的是不同UI界面,并且造成内存中同种资源的增加,则很有可能是UI在AssetBundle打包时形成了冗余(这种情况在目前的UGUI系统中较为常见)。对此,如果开发团队使用的是UGUI,那么我们的建议如下:

  1. 对于使用Unity 5.x的新AssetBundle打包系统,则打包时尽可能将同种Atlas的UI界面打成一个AssetBundle文件,否则将很有可能出现资源冗余的情况;
  2. 对于使用Unity 4.x的老AssetBundle打包系统,则可以将一个含有Atlas的Prefab(或其他Object)先打包,其他UI元素对其进行依赖即可。
  • 此外,开发团队可以考虑用 WWW.LoadFromCacheOrDownload 来加载共享包,因为 new WWW 的方式会在内存中形成 WebStream 造成较多的内存开销。关于该函数的具体优劣,开发者可以参考你应该知道的AssetBundle管理机制。

资源管理

Q7:纹理Atlas是建议合成一张2048(尺寸)的纹理还是四张1024的纹理?

在其他设置一致的情况下,这两种方式无论在加载还是渲染方面其实并没有实质上的差别。在我们接触到的大多数案例中,纹理资源方面的问题除了尺寸外,纹理格式、Mipmap设置和Read&Write功能同样是需要研发团队时刻关注的。

资源管理

Q8: 请问粒子特效的Shader是否不能使用依赖打包? 我们对Shader的模型和特效使用了依赖打包,运行的时候发现模型显示是正常的,但是粒子特效使用的Shader就不能正常运行,特效显示不正常。而在编辑器中,我们看到Material中的Shader是存在的。这时候如果重新手动给这个Material指定同样的Shader,这个粒子特效就能正常显示,请问这是什么原因引起的?

部分 Shader 在打包到 Android 版本的 Assetbundle 之后,会因为平台不兼容而无法正确显示,这是因为打包后的 Shader 代码只保留了目标平台的预编译代码,不一定能够在 Editor 下运行,所以这是正常现象。 但这并不会影响依赖打包,因为在真机上并不会出现类似的问题。

资源管理

Q9: iOS平台需要对图集做RGB和Alpha通道的分离吗?我发现在同样大小的图片(正方形),RGB Compressed PVRTC 4bits和RGBA Compressed PVRTC 4bits两种格式,占用内存是一样的,如果把一张图片分成两张,那么在iOS平台是不是占用内存多一倍?有透明通道的,对于它的图集怎么处理会更好一点?

通常iOS下是不需要做通道分离的,因为 iOS 通用的 PVRTC 格式支持 Alpha 通道。但目前也有团队反馈,在 iOS 上进行通道分离有助于减少失真,可以在一定程度上提高视觉效果,因此也可以尝试做一个对比。

如果发现占用内存是一样的,那么原始图片是RGB的。如果iOS上做通道分离,内存确实会增加一倍。UI的纹理在iOS下可以直接选择默认的 Compress,在打Atlas时会自动处理成 PVRTC,开发团队可以从Sprite packer窗口来看Atlas的压缩格式做个确认。

资源管理

Q10:我有一个UI预设,它使用了一个图集, 我在打包的时候把图集和UI一起打成了AssetBundle。我在加载生成了GameObject后立刻卸载了AssetBundle对象, 但是当我后面再销毁GameObject的时候发现图集依然存在,这是什么情况呢?

这是很可能出现的。unload(false)卸载AssetBundle并不会销毁其加载的资源 ,是必须调用 Resources.UnloadUnusedAssets才行。关于AssetBundle加载的详细解释可以参考我们之前的文章:你应该知道的AssetBundle管理机制。


软考高项总结:第13章资源管理(一) 按资源类别和类型,对团队和实物资源的层级列表,用于规划、管理和控制项目工作,每向下一个层级代表对资源的更详细描述,直到信息细到可以与工作分解结构(WBS)相结合。执行项目工作,以实现项目目标的一组人员,由为了完成项目而承担不同角色与职责的人员组成。是一种通过考察人们的努力行为与其所获得的最终奖酬之间的因果关系,来说明激励过程,并以选择合适的行为达到最终的。②外来的控制和处罚对人们实现组织的目标不是一个有效的办法,下属能够自我确定目标,自我指挥和自我控制。,如各项目阶段的启动、规划、执行、监督、控制和收尾。 阅读详情

相关推荐

Android资源管理框架-------之AssetManager2总述(一)

        Android对于资源管理这个模块的折腾从Android-Lollipop开始就从未停止过:Android-Lollipop引入了Runtime Resources Overlay,但是bug比较多,多得根本不能用;Android-Marshmallow算是修正了这些bug,Runtime Resour...

大勇的专栏 3348

Cocos实现对ETC2的支持

在深圳Cocos沙龙上,有幸结识了社区中大名顶顶的Colin,Shawn在在论坛上第一次看到Colin的团队用CocosCreator制作的《热血暗黑》时就被深深地震撼到...

奎特尔星球 1024

人工智能训练师技能等级认定四级技能考核试卷-样题1

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总分100分,考试时间150分钟。试卷涵盖数据处理、模型训练准备及系统维护等核心技能:1)垃圾分类数据集规范与处理(30分),要求评估数据格式并编写Python处理代码;2)学生成绩数据集分析(20分),涉及数据预处理、可视化及相关性分析;3)数据标注审核(10分),重点审核标注准确性;4)智能数据服务系统维护与优化(40分),包括安全帽数据集的项目创建、数据处理及平台协作。考核强调Python编程、数据处理平台操作及AI工作流程的实践能力。

weixin_42221934的博客 442

Unity常用图片格式说明

一、各种格式介绍 1、ETC * ETC1+Alpha * 需要二次方,长宽可不一样 * ETC2格式需要 OpenGL ES 3.0以上才支持,在不支持的设备上, Unity 在运行时将纹理解压缩为ETC2 回退指定的格式 2、PVRTC * IOS默认使用PVRTC * ......

Kt_KID的专栏 4264

UE4载具性能调优指南:从参数设置到实战优化

本文详细解析了UE4载具性能调优的关键技巧,从WheeledVehicle类构建到轮子参数、传动系统设置,再到物理属性与操控调校。通过实战案例分享,帮助开发者优化载具的速度、加速度等核心性能,提升游戏体验。特别适合需要精细调校载具物理特性的开发者参考。

weixin_29019241的博客 469

FreeSWITCH实战:5分钟搞定阿里云SDM(MRCP-SERVER)语音机器人搭建(含Docker部署技巧)

本文详细介绍了如何利用FreeSWITCH与阿里云SDM(MRCP-SERVER)快速搭建高可用语音机器人,包括Docker部署技巧、系统调优及高可用架构设计。通过实战案例和优化建议,帮助开发者5分钟内完成部署,提升语音交互系统的性能和稳定性。

stone的博客 505

Unity纹理压缩格式

介绍 要弄明白这些问题,首先要简单解释一下贴图压缩格式的基础概念。 为了让贴图在手机中运行时占用尽可能少的内存,需要设置贴图的压缩格式,目前 Unity 支持的主要压缩格式有:android 上的 ETC/ETC2,iOS 上的 PVRTC,以及未来可能会使用的 ASTC。这几个压缩格式有自己的特点: ETC:不支持透明通道,被所有 android 设备支持 ETC2:支持透明通道,Android 设备的 GPU 必须支持 OpenGL es 3.0 才可以使用,对于不支持的设备,会以未压缩的形式存

KindSuper_liu的专栏 2291

STM32鱼塘水质监测系统设计与实现

物联网技术在农业领域的应用正逐步深入,其中传感器网络作为关键基础设施,通过实时数据采集与传输实现环境监测。基于STM32微控制器的嵌入式系统因其高性能和低功耗特性,成为物联网终端设备的理想选择。该系统通过DS18B20水温传感器、PH传感器和浊度传感器组成的多参数检测网络,配合4G通信模块实现水质数据的远程监控。在农业物联网场景中,这种解决方案不仅大幅降低了传统人工检测的成本,更能通过实时预警有效预防养殖损失。本文介绍的鱼塘水质监测系统正是这一技术的典型应用,展示了如何通过STM32和常见传感器构建高性价比

weixin_42173218的博客 621

Word使用 Q&A

word骨灰级水平 问:WoRD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同? 答:分节,每节可以设置不同的页眉。文件――页面设置――版式――页眉和页脚――首页不同。 问:请问word 中怎样让每一章用不同的页眉?怎么我现在只能用一个页眉,一改就全部改了? 答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。简言之,分节符使得它们独立了。这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示

SHERLOCKSALVATORE的博客 2133

从零部署Stable Diffusion:本地环境搭建完整教程

本文专为“想自己跑Stable Diffusion但完全没经验”的新手设计,覆盖从硬件准备到生成第一张图的完整流程。不涉及复杂算法原理,但会讲清每个操作的“为什么”(比如为什么需要显卡?为什么要装CUDA?),帮你知其然更知其所以然。先检查硬件是否达标(显卡是核心!安装必要软件(操作系统、Python、CUDA)下载Stable Diffusion核心代码和模型解决常见报错,生成第一张图附赠模型库推荐和性能优化技巧显卡是核心:N卡+足够显存(至少6G)是本地部署的基础。CUDA是翻译。

AI算力网络与通信的博客 1294

【Maxwell16.0】实战指南:从DXF导入到MotorCAD联合仿真的关键技巧

本文详细解析了Maxwell 16.0与MotorCAD进行联合仿真的核心流程与关键技巧。重点阐述了从DXF模型导入、几何修复、一极一槽模型剪裁,到坐标系对齐、MotorCAD参数匹配及结果验证的全过程,旨在帮助工程师高效打通联合仿真链路,规避常见错误,提升电机设计效率。

weixin_29062865的博客 720

简单易懂的Q&A作成的10个方法

外包软件项目中,Q&A LIST是我们不可缺少的与客户进行沟通和问题确认的手段。由于我们与客户在语言,文化,习惯,思维方式等方面存在差异,经常导致在Q&A中出现不够顺利的情况,不仅耽误了项目进度,而且会增加项目的成本。下面根据我个人对日软件开发的项目经验,总结一下如果能够写好Q&A。 一、与客户进行Q&A过程中经常出现的问题。 1. 客户不知道我们在问什么。   原因:问题的主

亿言 7030

PD虚拟机网络初始化失败的权限修复指南

本文针对Parallels Desktop虚拟机常见的“网络初始化失败”问题,提供了详细的权限修复指南。通过分析问题根源,指导用户安全备份并修改关键的`network.desktop.xml`和`dispatcher.desktop.xml`配置文件,以恢复PD虚拟机的网络连接。文章还包含了修复后的验证步骤及预防措施,帮助用户彻底解决并避免此类权限问题。

qqq44的博客 852

Q&A——资源管理(十)

资源管理 Q1:关于定位游戏中冗余资源引用的问题。UWA的报告中能定位到具体的引用代码么? 在Profiler只能看到ManagedStaticReferences但是具体不到引用的位置。比如Static ClassA引用一个ClassB,ClassB上引用了一个资源,就定位不出这个引用的过程。请问这种情况下有没有比较好的方法找到引用关系呢? 该问题在Unity 5.3 之前的版本

起个名字好难啊 1352

AArch64 ARM64 寄存器介绍

除了上述通用寄存器,还有FPSR(浮点状态寄存器)和 FPCR(浮点控制寄存器)等。X29寄存器和X30寄存器在函数调用和堆栈帧的管理中扮演着关键角色。AArch64架构提供了31个通用寄存器,每个寄存器都可以用作64位X寄存器(X0~X30)或32位W寄存器(W0~W30)。使用X寄存器将导致64位的计算,使用W寄存器将导致32位的计算。EL0、EL1、EL2和EL3是AArch64架构中定义的四个特权级别(Exception Levels),用于支持不同的执行环境和特权级别。

lml435035844的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Q&A——资源管理(十一)

资源管理 Q1:怎么去掉Mesh中的Colors属性?我把FBX里的LayerElementColor字段都删了,这个Colors还是存在。 默认情况下,在3d建模软件中并不会导出Color属性。以3ds max为例,Color通常是通过modifier添加的,因此只需要在导出前将其删除即可。另外也可以通过fbx sdk来直接对文件进行处理,但这种做法就需要查看官方的文档了。

起个名字好难啊 935

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Q&A——资源管理(三)

资源管理 Q1:StreamingAssetPath 和 PersistantDataPath下可以不Load AssetBundle ,直接放资源Load吗? 这是可以的,但非常有限。因为不通过 AssetBundle 加载,只能通过 Unity 提供的有限的接口来直接加载外部资源,如通过 WWW.audioClip 直接加载 mp3文件,通过 WWW.texture 直接加载

起个名字好难啊 472

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Q&A——资源管理(七)

资源管理 Q1:我想请教一下,下图这个函数中,每次我都申请了一个List temp = list();在这里存放6KB的数据,但是如果不做GC处理,这6KB是否就一直累加,直到做GC处理了才会释放掉,是这样么?如果调用次数很多,每次都调用一点点,也会推高内存占用吗? A:是的,这个6KB堆内存会随着Update的执行一直分配内存,所累积的堆内存会在GC触发时进行销毁。一般来说,研发

编程小生的专栏 884

Q&A——资源管理(六)

资源管理 Q1:请教个问题,我用Unity 5 里提供的Sprite Packer把A.png,B.png打进一张图集,在运行时我怎么方便地加载这两张图呢?使用场景:某个Image控件根据不同的条件显示A,或者显示B。 目前通常是在脚本序列化信息中保留这两个Sprite的引用,在切换时直接通过对Image.sprite进行赋值来切换。

起个名字好难啊 1200

【Cocos Creator UI资源管理】

ui资源管理框架

Javaigood的博客 1611

Q&A——资源管理(十二)

资源管理 Q1:我们在做依赖打包改进,比如UIAtlas这种脚本,AssetBundle包里脚本没有做依赖,每个包里都有这个脚本,会导致Mono堆内存增大么?对于“脚本也是资产”这一点理解的不是很透彻。脚本在AssetBundle里是不会启动,但是会出现脚本丢失。本身没有做依赖打包的话脚本是冗余在AssetBundle中吧? 首先,需要说明的是,脚本本身的内容是不会被打包到Asse

起个名字好难啊 1100

Q&A——资源管理(五)

资源管理 Q1:Unity中的SerializedFile是怎么产生的?请问用Unload(false)可以清除吗?因为读取了Bundle里面的内容后已经赋值给其他物体了。而且我把图片都打成了Bundle,然后读取出来,图片的大小应该是超过了这个SerializedFile的大小的? SerializedFile是AssetBundle加载时产生的序列化信息,一般为LoadFr

起个名字好难啊 817

Q&A——资源管理(八)

资源管理 Q1: 我使用Shader.WarmupAllShaders操作,在后续加载资源还是有CreateGPUProgram出现。(Shader都在一个AssetBundle文件中,都是常驻内存的,不会删掉)是必须使用ShaderVariantCollection来加载Shader吗? A:以上这种问题的较大可能是:Shader被打包到不同AssetBundle中了,WarmupA

编程小生的专栏 786
上一篇: Q&A——内存管理(一)
下一篇: Q&A——资源加载(一)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值