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

Unity3D 游戏测试方法概述 笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。优快云视频网址:http://edu.youkuaiyun.com/lecturer/144 游戏中的测试方法很多的,一般的操作方式就是给出测试用例,然后QA人员根据测试用例逐条测试,程序包对于QA人员就是 阅读详情

资源管理

Q1:怎么去掉Mesh中的Colors属性?我把FBX里的LayerElementColor字段都删了,这个Colors还是存在。
请输入图片描述

默认情况下,在3d建模软件中并不会导出Color属性。以3ds max为例,Color通常是通过modifier添加的,因此只需要在导出前将其删除即可。另外也可以通过fbx sdk来直接对文件进行处理,但这种做法就需要查看官方的文档了。

资源管理

Q2:请教一下,大家把UI做Alpha分离以后,会把分离前的图删掉吗?我这边把分离前的图删掉了,但是美术反映他们无法使用分离后的图了,因为在预览窗口看不了图。但是我又不想让他们用原来的图,否则还要花精力去维护。大家都是怎么处理的呢?

建议将原图保留(但不与任何资源产生依赖,以免打入发布包中),同时提供给美术一个一键更新的工具,如PSD For UGUI,就能够自动化地处理Alpha的拆分和图片的替换,从而在减少程序的工作量的同时,保证美术的快速迭代。但具体的目录安排、替换规则等,则需要根据项目自己的需求来定。


资源管理

Q3:在加载场景依赖的所有AssetBundle 后调用LoadLevelAsync,在LoadLevelAsync调用完成后, 对所有的AssetBundle调用unload(false),不知这样是否可行。主要想减少Webstream占有的内存。 现在有个问题,场景中的特效,在几次进入视野后会丢图。 场景景物是正确的,可能是什么原因导致的呢?

这种方式是可行的,不过需要注意的是,场景加载后使用Unload卸载的AssetBundle是否以后还会被其他加载的资源所依赖,如有,则不建议进行卸载,否则会出现后续资源丢失的情况。场景中的特效纹理丢失,极有可能属于这种情况。建议研发团队首先判断纹理特效的资源均在哪些AssetBundle中,然后试验在这些AssetBundle不卸载的情况下,多次切换场景,看其特效纹理是否还会丢失,从而来判断该问题是否由AssetBundle的卸载所导致的。


资源管理

Q4:公共AssetBundle太大会不会影响更新包的大小?这个公共包不unload会不会导致SerlizedFile太大,卸载的话会不会导致公共AssetBundle的Asset冗余?

公共AssetBundle的大小主要根据项目的内容和需求定。如果是担心单个AssetBundle较大,那么自行拆分即可。同时,根据Unity 5.3以后版本中新的LZ4压缩特性,单个AB的大小对加载速度已经影响很小。内存中AB中加载得越多,理论上SerializedFile越大,这是天平的两端,需要视自身情况而定。


资源管理

Q5:iOS下PVRTC格式对Alpha通道的支持不是很好,凡是有渐变的图集,失真都很严重。是否把Alpha分离出来,图片的品质就会有所提升? 但是内存会比PVRTC大一倍。

PVRTC格式其实是有损压缩格式,图片压缩确实会出现一定的失真,且过渡范围较大的区域也会出现“色阶”问题,这其实是由其底层算法导致的。将Alpha通道分离出来,从理论上来讲并不会消除上述问题,但目前国内团队中确实有进行如此操作且视觉效果有所改善,所以建议研发团队不妨尝试一下,来看问题纹理的视觉效果是否有所改善。


资源管理

Q6:请教一下,SerializedFile的卸载规则是什么呢?会跟随这AssetBundle一起卸载么?
请输入图片描述

绝大部分的SerializedFile均由AssetBundle产生,当AssetBundle被卸载时,与其对应的SerializedFile也将销毁。

资源管理

Q7:有没有什么办法可以提升Unity编辑器中代码的编译速度?我们现在每修改一次代码,等待的编译时间都将近半分钟。

对于大型项目来说,这确实是大家经常遇到的情况。一般来说,Unity Editor会按照脚本的依赖关系编译代码,其主要分为以下四个步骤:

  1. 编译Standard Assets、Pro Standard Assets和Plugins文件夹中的Runtime Script;
  2. 编译以上三个文件夹中Editor文件夹下的Script;
  3. 编译项目中所有剩余的Runtime Script(Editor文件夹以外Script;
  4. 编译剩余Script(即Editor文件夹中Script)。

知道了Unity编辑器的脚本编译特性后,我们则建议研发团队可以将一些长时间不需要改动的脚本代码(比如各种插件代码)放入到Standard Assets、Pro Standard Assets或Plugins文件夹中,这样这些代码只需要编译一次,后续的时间就都能节省下来。有朋友做过测试,在他们的项目中经过上面的改动,原来项目每次的编译时间从23s下降到7s。想想看,这将节省你和你的团队多少时间!
推荐插件:Mad Compile Time Optimizer (https://www.assetstore.unity3d.com/en/#!/content/34012)
推荐阅读:http://qiankanglai.me/2016/11/27/unity-compiler/

资源管理

Q8:目前所遇到的问题是在UGUI下,无法使用ECT+Alpha分离,函数中已经设置了,但是实际打出来的包并不能显示。我们所使用的Unity版本为5.4.1f,所以特此请教一下是否哪些地方我们使用的不对。

目前看下来,这很可能由Unity的Bug所致: 在对开启了 Compress using ETC1 的选项的Sprite类型的纹理打包时,不会将其对应的Shader(UI/DefaultETC1)打入包内,造成真机运行时Shader丢失,看上去变成紫红色。

解决的方法: 在 Edit->Project Settings->Graphics 的 Always Included Shaders 中加入 UI/DefaultETC1 即可。我们测试用的是 5.4.3f1,所以升级版本应该暂时解决不了。


资源管理

Q9:下图中WWW.LoadFromCacheOrDownload第三个参数是用来验证资源的吗? 感觉跟第二个参数有点相似(除了验证以外), WWW.LoadFromCacheOrDownload在iOS上是否有数量限制?

请输入图片描述

第三个参数是与资源的验证有关,如果crc值不匹配则需要重新下载或者报错,这与第二个参数并不相同,第二个参数主要用来管理版本更新,通过参数的更改,使得客户端及时更新Cache中缓存的AsseBundle数据。iOS上在Unity 4.x的版本中,通过该接口加载,且同时存在于内存中的AssetBundle数量确实是有限的,接近300个,这是由iOS上文件句柄数的限制导致,而在Unity 5.x 中,由于引入了虚拟文件系统,则不再有这个限制。


资源管理

Q10:WWW.LoadFromCacheOrDownload只是在内存中有个引用,没有实际加载资源,调用WWW.assetbundle后也是么? 那么依赖此AssetBundle的资源加载的时候,会自动触发此AssetBundle从磁盘加载对应的引用资源么?

在调用WWW.assetBundle之后,内存中也只是存在较小的SerializedFile(不包含资源数据)。“那么依赖此AB的资源加载的时候”确实会触发该AssetBundle通过磁盘IO加载资源。


咱们继续学Java——高级篇 第八十一篇:之JDBC资源管理与异常处理 大家好!在之前的博客中,我们学习了JDBC语句的执行和结果处理,今天我们将进一步深入探讨JDBC编程中非常重要的两个方面:资源管理和异常处理。在实际的数据库应用开发中,合理管理连接、语句和结果集等资源,以及正确处理可能出现的异常,对于程序的性能、稳定性和可靠性至关重要。我希望通过这篇博客,用通俗易懂的语言为大家详细讲解如何有效地管理JDBC资源,避免资源泄漏,以及如何深入分析和处理SQL异常。我会结合实际代码示例,让大家更加直观地理解这些概念和操作。希望大家在阅读过程中积极思考,将所学知识运用到实际项目中。 阅读详情

相关推荐

Infor_Query_and_Analysis_10_1_6_SunSystems

Infor Q&A 相信很多相关人士使用过的吧,这次特把安装程序上传上来.希望对大家有帮忙,.由于安装程序大于240,只能分开两个上传了. 程序内容包括如下: Infor_Query_and_Analysis_10_1_6_SunSystems.part1.rar 链接地址 https://download.youkuaiyun.com/download/snuff_914/10357595 Infor_Query_and_Analysis_10_1_6_SunSystems.part2.rar 链接地址 https://download.youkuaiyun.com/download/snuff_914/10357609

技术分享连载(四十三)

精选5个性能优化问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 UWA QQ群:465082844

UWA—简单优化,优化简单! 529

UniApp 与 Taro 深度解析:如何根据项目需求选择最佳跨平台框架?

本文深度对比了UniApp和Taro两大主流跨平台开发框架。UniApp基于Vue生态,提供开箱即用的高效开发体验,尤其适合快速覆盖多端小程序;Taro则根植React范式,架构灵活,便于与现有React生态集成,更适合对性能和原生体验有高要求的复杂项目。文章结合团队技术栈、项目类型及性能需求,为开发者提供了清晰的选型指南。

snow3的博客 204

Q&A——性能优化(一)

性能优化 Q1:如图,我们在UI打开或者移动到某处的时候经常会观测到CPU上的冲激,经过进一步观察发现是因为Instantiate产生了大量的GC。想请问下Instantiate是否应该产生GC呢?我们能否通过资源制作上的调整来避免这样的GC呢?如下图,因为一次性产生若干MB的GC在直观感受上还是很可观的。 准确的说这些 GC Alloc 并不是由Instantiate 直

起个名字好难啊 884

CANOCO5.0实现冗余分析(RDA)最详细步骤

在地理及生态领域会常使用RDA分析,RDA的实现路径也有很多,今天介绍一下CANOCO软件的实现方法。1.不同样点和环境因子之间夹角是锐角 是正相关,是钝角是负相关。2.夹角越大 说明相关性较小,夹角越小,相关性越大。得有不同的物种或者样点数值,再加上环境因子数据。3.箭头越长 相关性越大。时间调整到2010年。

Along6的博客 1万+

手把手教你用RK3568开发板实现FPGA与Linux的DMA通信(含完整代码解析)

本文详细介绍了如何在RK3568开发板上实现FPGA与Linux系统的DMA通信,包括硬件配置、软件环境搭建、DMA通信原理、驱动开发及性能优化。通过完整的代码解析和实战案例,帮助开发者快速掌握异构系统间的高效数据传输技术,适用于物联网和边缘计算等场景。

weixin_29174385的博客 201

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

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

起个名字好难啊 1352

从亚稳态到稳定传输:深入解析CDC跨时钟域同步的核心技术与设计实践

本文深入解析了CDC(跨时钟域同步)技术的核心问题与解决方案,重点探讨了亚稳态现象及其危害,详细介绍了同步器设计、MTBF计算方法以及单bit和多bit信号同步的实战技巧。通过Verilog代码示例和工程实践案例,帮助读者掌握从亚稳态到稳定传输的关键技术,提升数字电路设计的可靠性。

weixin_32822843的博客 248

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

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

起个名字好难啊 472

智能驾驶域控制器的“终极大考”:解析EOL测试的核心价值与技术实践

在智能驾驶技术高速发展的今天,域控制器(Domain Controller)作为车辆“大脑”的核心部件,承担着传感器数据处理、决策规划、执行控制等关键任务。然而,这个集成了数十个芯片、运行着数百万行代码的复杂系统,如何确保其出厂前的功能安全与性能稳定?答案就藏在被称为“生产线最后一道防线”的EOL(End of Line)测试中。

汽车电子软件领域知识分享 705

流体动力学仿真软件:Star-CCM+_(15).用户自定义函数与模型

用户自定义函数(User-Defined Functions, UDFs)允许用户编写自己的函数,并在仿真中调用这些函数。UDFs可以用于定义复杂的边界条件、源项、材料属性等。Star-CCM+支持多种编程语言,包括C++、Fortran和Java等,其中最常用的语言是Java。用户自定义模型(User-Defined Models, UDMs)允许用户在仿真中引入自定义的物理模型。这些模型可以用于描述流体行为、化学反应、多相流等复杂现象。Star-CCM+提供了丰富的API来支持UDMs的开发。

kkchenjj的博客 557

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

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

编程小生的专栏 884

MATLAB计算各种复合干热指数,如SDHI、DHMI等

MATLAB编程实现各种复合干热指数

WW、forever的博客 5082

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

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

起个名字好难啊 1200

Claude Code 100个真实案例 - 用AI设计Arduino PCB电路板(硬件小白也能画板)

本案例展示如何使用 Claude Code 配合 KiCad 的 Python 脚本接口,从零设计一块 Arduino 传感器扩展板 PCB。从原理图符号创建、网表生成到 PCB 布局布线,全程自动化完成,最终输出可直接发给工厂打样的 Gerber 文件。

yueyeguzhuo的专栏 446

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C# 探险之旅:第八十一节 - 垃圾回收和资源管理

垃圾回收是.NET框架中的一项神奇技术,它自动管理内存的分配和释放。就像你妈妈总是唠叨你要整理房间一样,GC在后台默默工作,确保不再使用的对象被清理掉,从而腾出空间给新的对象使用。

caifox的博客 1145

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

起个名字好难啊 1100

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Cocos Creator UI资源管理】

ui资源管理框架

Javaigood的博客 1611

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——资源管理(十四)

资源管理 Q1:我的游戏运行一段时间之后,已经切换到一个空场景了,然后手动调用了System.GC.Collect(); Resources.UnloadUnusedAssets();为什么还是会有这么多贴图资源被引用呢。我猜可能是由于一些脚本中的静态变量引用导致,请问有办法查出来是哪些静态变量吗? 很大可能是这些资源直接或间接被其他Container缓存了,这种情况在我们进行内存

起个名字好难啊 585

Gameframework资源管理适配其他资源管理方案

由于我们实际使用的过程中只会使用上面定义的接口,所以可以直接return了。两个版本由于是单独构建的,因此无法实现一次打包,两个版本互用的情况。使用mono来实现这个接口,在启动应用的时候注册到GFAdapterResourceManager 中,操作和ufg的editor资源加载方案相似。实现CustomResourceManagerBase,简单的把ugf中的editor相关的移植过来。在做之前,我们需要研究一下,常用的几款资源管理方案。此处的接口是按照ugf的接口进行提出的,方便适配。

zweiluan的博客 1071
上一篇: Q&A——UI Mesh 渲染
下一篇: Q&A——资源管理(十二)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值