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

【Unity性能优化】Shader的WarmUp shader_feature和multi_compile的差异? shader warmup在做什么事? Shader.Parse和Shader.CreateGpuProgram差异? 阅读详情

资源管理

Q1:Prefab中的GameObject的tag设置为EditorOnly仍然会被打进Resoures包吗?有其它EditorOnly方案吗?

EditorOnly理论上只对场景中的 GameObject起效。因此 Project 目录中的 Prefab 打上 EditorOnly 后,放在 Resources 目录下依然会被打进游戏包中。但只要将其放在 Resources 目录以外,则其就会因为没有场景中的物件引用而被排除在外。

资源管理

Q2:打包时候AssetBundle的md5总变化(被打包的东西没变),请问能怎么解决?有说法是加上DeterministicAssetBundle就可以,但是我尝试后发现md5依然变化。

该方法确实并不受用。对于Unity 4.x版本的AssetBundle文件,其md5值在某些情况下确实会前后不一致(哪怕是完全一样的内容进行打包)。对于该系列版本,仅能建议开发团队建立配置文件来对AssetBundle进行管理。

而对于Unity 5.x版本,则可以在打包时开启 AppendHashToAssetBundleName 选项,这样Unity引擎会在每个AssetBundle文件后生成一个唯一的HashID(显示地放在文件名后),开发团队可以通过该ID来判断对应的AssetBundle文件是否发生改变。

资源管理

Q3:请问内置的shader怎么打包?我用到了内置材质球,不只是Shader,这时候在Profiler中看到加载的结果中会出现多份,如下图所示:
UWA Tech Doc

通常有两种方式对内置的Shader进行打包:

  1. 将其添加到Graphics Settings中的Always Included Shaders 中,此时添加后的内置Shader就不会被打入AssetBundle包中;
  2. 在http://unity3d.com/cn/get-unity/download/archive下载内置的 Shader,将其导入项目,并替换成非内置的材质球,从而可以直接通过脚本来控制其打包的方式。

资源管理

Q4:用Resources.UnloadAsset 释放未Instance的Object 会出现这样的错误 :Unload Assets may only be used on individual assets and can not be used on GameObject's/Components or AssetBundles.请问该如何解决?

Resources.UnloadAsset仅能释放非GameObject和Component的资源,比如Texture、Mesh等真正的资源。对于由Prefab加载出来的Object或Component,则不能通过该函数来进行释放。


资源管理

Q5:我现在动态加载StreamingAssets下的贴图,代码如下:
UWA Tech Doc
我发现这种方式内存消耗很大,一张512 x 512的贴图占用了2MB,看官方的解析是内存和显存各需一份。想了解下动态加载贴图有什么推荐的方式吗?

一般来说,我们比较建议通过AssetBundle来动态加载资源,而非通过bytes流来进行加载。如果你的项目正在使用这种方式来加载纹理,我们建议从策略上考虑将其更改。在我们目前来看,通过bytes流来生成资源,绝大部分原因是想对其进行加密,从而让资源难于破解。但其实这种加密方式用处不大,因为据我们所知,现在有很多工具可以直接通过底层显卡层来直接查看各种纹理、Mesh资源,比如Mali Graphics Debugger、Qualcomn Profiler等。因此,如果是从加密的角度来通过bytes流生成资源,那么我们建议通过AssetBundle这种直接的方式进行加载。

资源管理

Q6:我用的是Resource的加载方式,并且已经预加载好了材质所在的Prefab ,但是为什么在第一次显示材质的时候还要Load这个材质?

通过 Resources 加载和通过 AssetBundle 加载是有所区别的。Resources.Load 和 Instantiate 操作都不会立刻加载其依赖的材质,因此在loadPrefab = Resources.Load之后,其依赖的材质(包括相关的 Shader 和纹理)实际并没有被加载到内存中,在实例化后也是一样,直到某个 Camera 需要对其进行渲染时(调用了 Material.SetPastFast),才发现该材质还没进内存,此时才开始进行加载。

因此,在使用 Resources 加载的情况下,如果希望提前加载该 Material 以及相关的 Shader 和纹理,可以尝试通过调用 Resources.Load 直接加载该材质和纹理,并通过 Shader.Find 来加载 Shader。也可以尝试通过 Player Settings 中的 Preload Shaders(配合 Graphics Settings 下的 Preloaded Shaders) 和 Preloaded Assets 来批量预加载。


资源管理

Q7:我们的游戏使用 Spine 插件,因为要用到裁切动画,所以修改了Shader,但在使用的时候出现异常: Shader wants normals, but the mesh Skeleton Mesh doesn't have them,可能是什么原因?

开发团队需要注意:Surface Shader在生成代码中默认会处理normal(即 Spine/Skeleton 实际上是需要 normal 的),而对应的Mesh并没有包含normal,所以在预览窗口里渲染的时候会检查 Mesh 是否包含 normal 信息,没有的话会报这个错误。

开发团队可以尝试编写一个Vertex & Fragment Shader 从而避免处理normal,也可以尝试创建带normal的Mesh,来避免该问题。


资源管理

Q8:我在第一次执行GameObject.Instantiate一些资源的时候会卡(当时加载当时就实例的情况),有的复杂资源甚至在第一次GameObject.Instantiate的时候会卡70多毫秒,造成明显的卡顿,请问有什么好的解决方案吗?

Instantiate的卡顿与三部分开销相关:相关资源加载、脚本组件的序列化和构造函数的执行,并且绝大部分原因均是相关资源加载导致。所以,我们的建议如下:

1、通过 Profiler 查看 Instantiate 具体的CPU分配情况;
2、如果是资源加载导致的性能瓶颈,则一方面通过简化资源来缓解CPU耗时压力,另一方面通过 AssetBundle 依赖关系打包将资源预先加载,即将此处 Instantiate 的总体耗时拆分,平摊到之前帧进行执行(比如切换场景处等),从而让 Instantiate 实例化操作的局部耗时更加平滑;
3、如果是脚本组件序列化导致的性能瓶颈,则可尝试减少脚本中的序列化信息;
4、如果是构造函数的执行导致的性能瓶颈,一般只能在策略上进行规避,比如降低 Instantiate 的调用频率等。

针对资源加载部分,我们近期正以专题的形式连载中,后续会对其Instantiate实例化的调用进行更为详细的分析,敬请期待。


资源管理

Q9:同一个纹理,有多个Prefab生成的实例,会有多份这个纹理的copy吗?

该问题需要查看 Prefab 的具体加载方式。如果仅是通过 Resources.Load 进行加载,那么纹理是不会存在多份的,但如果是通过AssetBundle加载,每个 Prefab 均为一个 AssetBundle 且纹理没有进行依赖关系打包的话,那么纹理资源确实会在内存中存在多份。如果你发现了内存中存在多份相同纹理,且是通过 AssetBundle 文件来加载资源的,则建议将 AssetBundle 上传到UWA网站(www.uwa4d.com)中,其资源检测工具能协助开发团队高效检测并定位AssetBundle中的冗余资源。

资源管理

Q10:我项目的UnityShaderCache目录下有300个文件(如下),且不是一次生成, 而是随着游戏进行而产生的。

Application.persistentDataPath/cache/UnityShaderCache

为了在游戏第一次进行时把所有Shader都编译来减少卡顿,我把用到的Shader加入到 Always Included Shaders中, 并在游戏开始时调用了 Shader.WarmupAllShaders,也尝试把Shader打个包一起加载出来 ,然后Shader.WarmupAllShaders,但是效果并不理想。有什么好的解决方案吗?
另一个困惑:已加到 Always Included Shaders 中的。 还需要再加载一次么?

首先 Shader. WarmupAllShaders 并不影响 Shader 的加载,因为该函数的作用是将所有已加载的 Shader 都做一次快速渲染(渲染单个像素,GPU 在首次使用某一个 Shader 时会有额外开销,Warm 相当于是将这部分开销提前)。所以可以通过AssetBundle.LoadAll等接口预加载 AssetBundle 中的 Shader。而对于 Always Included Shaders 中的 Shader 则可以通过 Shader. Find 来预加载。


Qt调用COM组件实现Windows资源管理器文件预览功能 Qt基于COM组件,通过QAxObject调用IPreviewHandler和IInitializeWithFile接口,实现类似系统资源管理器的预览功能。 阅读详情

相关推荐

告别跳转!手动修复Win7下FTP协议关联,让资源管理器真正接管文件传输

本文详细介绍了在Windows 7系统中手动修复FTP协议关联的方法,解决FTP链接默认跳转浏览器的问题。通过修改注册表设置,让资源管理器重新接管FTP文件传输,提升工作效率。文章包含诊断步骤、注册表修改指南及预防措施,帮助用户彻底解决这一常见系统问题。

weixin_30635053的博客 371

利用PrefabEditor监听prefab保存事件

PrefabStage的记录

whr12的博客 3016

记录:N10激光雷达串口编程,将数据存进 SQLite,并进行 ROS2 - cartographer 单雷达建图

N10 系列采用 TOF(time of flight)测距原理,通过测量调制激光的发射、返回时间差来测量物体与传感器的相对距离。激光发射器发出调制脉冲激光,内部定时器开始 从t1时刻计算时间,当激光照射到目标物体后,部分能量返回,当雷达接收到返回的激光信号时,在t2时刻停止内部定时器计时,光速C,激光雷达到达物体的距离D为:经过N10系列激光雷达内嵌的信号处理单元的实时解算得到探测物体的距离值,结合高精度自适应角度测量模块输出的角度信息,可以得到量程内周围 360 度环境 的二维平面信息。

m0_74013893的博客 1096

【unity游戏开发——编辑器扩展】PrefabUtility公共类处理预制体(Prefab)的各种操作

Unity编辑器扩展:PrefabUtility核心功能解析 本文详细介绍了Unity编辑器API中的PrefabUtility类,它专门用于处理预制体的创建、修改与实例化操作。主要内容包括: 预制体创建:SaveAsPrefabAsset方法将场景对象转为预制体 预制体加载:LoadPrefabContents加载到内存修改结构,需配合UnloadPrefabContents释放 预制体修改:SavePrefabAsset直接修改预制体资源属性 预制体实例化:InstantiatePrefab方法实例化预

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1541

群晖Hyper Backup还原实战:加密与非加密备份的完整操作指南

本文详细介绍了群晖Hyper Backup在加密与非加密备份场景下的完整还原操作指南。通过实战案例和高级技巧,帮助用户应对硬盘故障或系统崩溃时的数据恢复挑战,特别是加密备份恢复中的关键节点和常见陷阱。

weixin_29323365的博客 445

避坑指南:群晖DSM 7.X挂载NTFS硬盘,为什么你的SATA口不行?从原理到实战一次讲清

本文深入解析群晖DSM 7.X系统挂载NTFS硬盘的底层原理与实战排查方法,揭示SATA接口权限配置的关键参数(如esataportcfg和internalportcfg),并提供安全修改端口配置的详细步骤。针对不同型号群晖NAS的配置差异,给出替代方案与常见故障排查技巧,帮助用户解决NTFS硬盘挂载问题。

weixin_26757925的博客 257

UnityShader之一 基础知识

UnityShader系列文章转载于 @浅墨_毛星云,为本人的学习笔记,转载请注明出处。 文章链接:https://blog.youkuaiyun.com/poem_qianmo/article/details/40955607   Shader和Material的基础概念   先引用一段文字,阐述Shader和Material的基本关系     “Shader(着色器)实际上就是一小段程序,它负...

m0_37884055的博客 1615

避坑指南:C#用S7NetPlus读写西门子PLC字符串(String/WString)的完整方案

本文详细解析了C#通过S7NetPlus读写西门子PLC字符串(String/WString)的完整方案,包括内存布局、编码差异和字节序处理等关键技术细节。提供了实战优化的代码示例和常见问题排查指南,帮助开发者避免乱码、截断等常见陷阱,提升工业自动化项目的开发效率。

weixin_32956805的博客 323

技术分享连载(十九)

资源管理 Q1:我项目的UnityShaderCache目录下有300个文件(如下),且不是一次生成, 而是随着游戏进行而产生的。 Application.persistentDataPath/cache/UnityShaderCache 为了在游戏第一次进行时把所有Shader都编译来减少卡顿,我把用到的Shader加入到 Always Inclu...

weixin_33807284的博客 800

DVWA全级别详细通关教程

dvwa全级别详细通关教程,暴力破解,命令注入,CSRF跨站请求伪造,文件包含,文件上传​,SQL注入,XSS

m0_62063669的博客 1万+

SAP 创建PO时提示“不能确定任何组件”

SAP 创建委外加工的PO时提示“不能确定任何组件” 而如果BOM已经创建了,但还是提示该错误保存。 解决办法:1. BOM selection 未配置好; 2. 由于Purchasing prosessing time的设置,如果PO中的delivery time - Purchasing prosessing time是过去的日期,那么会找不到BOM,BOM的有效期需早 于PO审批的有效期。 3. BOM未...

willieyuan的博客 6122

显示windows脚本宿主 盘符C\\D\\E\\F:\\u.vbe 错误:系统找不到指定的文件

现象:打不开,各个磁盘 显示windows脚本宿主 盘符C\\D\\E\\F:\\u.vbe 错误:系统找不到指定的文件 .keysearch { BORDER-RIGHT: #ffe7b1 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ffe7b1 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM:...

weixin_30873847的博客 230

人群仿真软件:AnyLogic_(12).AnyLogic高级功能应用

在AnyLogic中,自定义行人行为是通过编写Java代码来实现的。行人行为的自定义可以包括行走路径的选择、速度变化、交互行为等。这使得仿真模型更加灵活和真实。

kkchenjj的博客 1062

OpenShell:Windows资源管理器增强层与WSL深度集成方案

Windows资源管理器是用户日常操作的核心界面,其原生功能在多系统协同、开发效率和路径管理方面存在明显短板。OpenShell 通过外壳扩展(Shell Extension)技术,在不替换 Explorer.exe 进程的前提下,实现 UI 层级的深度定制与功能补全,兼顾系统稳定性与交互效率。它基于 COM 接口劫持与 DLL 注入机制,天然兼容 WSL 的 \wsl$\ 命名空间,支持一键跳转、地址栏快捷指令(如 wsl:ubuntu)及右键终端命令注入,成为 Windows 开发者连接 Linux 子

weixin_30768881的博客 214

开源GIS -- 笔记

基础开发库 数据读写:GDAL/OGR(C/C++) ArcGIS和GE都是使用此工具 投影转换:Proj.4(C/C++) 拓扑计算:JTS(Java),GEOS(C++),Shapely(python) 组件式开发库 GeoTools(Java),DotSpatial(.NET) 空间分析: Scipy(通用科学计算、方程求解), numpy,NextworkX, rPy(统计分析), Scikit-learn,pysal(空间分析) 深度学习: Keras、 tensorflow、 pytor

DZ Space 4521

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

资源管理器 # Explorer

远程管理linux服务器的xftp到期了,相比命令模式,无非就是多了GUI界面,自己尝试做个远程管理脚本,配上GUI,也应该够用了。树形资源管理能轻松实现,qt本身自带Qtreeview,但总归有点不习惯。难点在于鼠标双击更新列表给Listview,前期拿本地资源管理练手。资源管理器 #explorer。

neolan00的博客 277

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

在PyAEDT中实现Q3D RLGC组件转换的技术解析

在PyAEDT中实现Q3D RLGC组件转换的技术解析 背景介绍 在电磁仿真领域,ANSYS Electronics Desktop (AEDT) 是一个功能强大的工具集,而PyAEDT作为其Python API,为用户提供了自动化操作AEDT的能力。本文将详细介绍如何在PyAEDT中实现从Q3D仿真到电路RLGC组件的转换过程,这是电磁仿真与电路仿真协同工作的重要环节。 Q3D RLGC组件转换...

gitblog_07899的博客 613

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

使用java访问网络资源管理器_JAVA从入门到精通之Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用...

本篇文章探讨了JAVA从入门到精通之Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。<启动浏览器或者打开资源管理器启动浏览器java1.6版本以上,DesktopDesktop.getDesktop().browse(new URI("www.cnblogs.com/kex...

weixin_42333370的博客 170

java打开资源管理器_Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用...

启动浏览器或者打开资源管理器启动浏览器java1.6版本以上,DesktopDesktop.getDesktop().browse(new URI("www.cnblogs.com/kexing"));打开资源管理器三种方式//第一种常用,打开q:\\MyBlog这个文件夹目录Desktop.getDesktop().open(new File("q:\\MyBlog"));Runtime.get...

weixin_39622419的博客 667

Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用...

启动浏览器或者打开资源管理器 启动浏览器 java1.6版本以上,Desktop Desktop.getDesktop().browse(new URI("www.cnblogs.com/kexing")); 打开资源管理器 三种方式 //第一种常用,打开q:\\MyBlog这个文件夹目录 Desktop.getDesktop().open(new File("q:\\MyBlog")); Run...

weixin_30781107的博客 270

中小型人力资源管理系统

管理员功能有个人中心,人事管理员管理,普通员工管理,考勤打卡管理,员工信息管理,调休申请管理,工资单管理,岗位调动管理,入职信息管理,员工培训管理,系统管理等。人事管理员功能有个人中心,员工信息管理,调休申请管理,工资单管理,岗位调动管理,入职信息管理,员工培训管理等。员工功能有个人中心,考勤打卡管理,员工信息管理,调休申请管理,工资单管理,岗位调动管理,入职信息管理。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高基于java web的中小型人力资源管理系统管理效率。

xn19950718的博客 362

医院资源管理系统

互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用医院资源管理系统可以有效管理,使信息管理能够更加科学和规范。总之,医院资源管理系统集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。医院资源管理系统在Eclipse环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。

xn19950718的博客 405

T5 Base模型深度拆解:从文本到文本的革命性突破

**T5 Base模型**是Google Research开发的一款革命性的文本到文本转换Transformer模型,它将所有自然语言处理任务统一为文本到文本的格式。这个拥有2.2亿参数的强大模型在机器翻译、文档摘要、问答系统等NLP任务中表现出色,为AI开发者提供了简单高效的解决方案。 ## 🚀 T5 Base模型的核心优势 T5 Base模型的最大创新在于其**统一的文本到文本框架**。

gitblog_00020的博客 294

终极指南:如何彻底解决ExplorerPatcher导致的Windows资源管理器崩溃问题

你是否正在使用ExplorerPatcher来个性化Windows界面,却频繁遭遇资源管理器崩溃的困扰?任务栏突然消失、桌面图标无法点击、文件资源管理器窗口意外关闭——这些恼人的问题不仅影响工作效率,还可能让你担心系统稳定性。本文将为你提供一套完整的解决方案,从快速修复到根本预防,让你彻底告别ExplorerPatcher相关的崩溃烦恼。 ## 理解崩溃的三大元凶 ExplorerPatche

gitblog_00809的博客 214

人力资源管理系统

传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,员工信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的人力资源管理系统。本人力资源管理系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理汽车信息以及汽车的租赁信息,能够与用户进行相互交流等操作,用户可以查看员工信息,可以查看应聘以及查看管理员回复信息等操作。人力资源管理系统的设计与实现。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值