- 博客(24)
- 资源 (1)
- 收藏
- 关注
原创 Unity场景整体发紫(Magenta)的异常情况处理
整场品红,多半不是某个材质坏了,而是「运行时生效的渲染管线」和「打包时编译 Shader 变体所用的管线」对不上。把设置改回来只是第一步,旧的 Shader 变体缓存和 Addressables 包必须一起重建,否则增量构建会把问题原样带回来。:Unity + URP + Android 出包(不同 Unity 版本的菜单名称与路径略有出入)。项目按设备性能做了画质分级,运行时由切换管线 / 画质档。
2026-10-19 18:22:45
311
原创 图形渲染上屏(四)-应用/引擎层--CPU调用渲染命令
图形API 定义的是标准接口,但真正和 GPU 硬件打交道的,是显卡驱动。驱动的职责是:把图形API的标准命令翻译成 GPU 硬件能理解的指令。针对具体 GPU 架构进行优化(比如调整命令顺序、合并状态切换)。管理 GPU 内存、调度 GPU 任务。不同厂商的 GPU 架构不同,驱动实现也不同。这也是为什么同一个游戏,在不同显卡上的性能表现会有差异。厂商主要 GPU 架构系列核心特点与代表产品QualcommAdreno。
2026-09-13 12:44:58
159
原创 图形渲染上屏(三)-GPU渲染管线--像素是怎么算出
GPU 渲染一帧画面,它不是“一步到位”地算出整张图,而是把三维场景数据当成食材,经过一条流水线,一步步加工成最终的像素。这条流水线,就是 渲染管线(Rendering Pipeline)。
2026-09-12 14:42:02
148
原创 图形渲染上屏(二)-帧缓冲的供给--交换链与垂直同步(像素如何进入帧缓冲)
当GPU渲染完成后,两块缓冲的角色进行交换——后缓冲变成新的前缓冲,前缓冲变成新的后缓冲。这样,GPU渲染完一帧后,可以先把它放入“等待队列”,然后立刻开始渲染下一帧,而不必等待显示控制器。交换链把后缓冲“推”到队列前面,成为新的前缓冲,原来的前缓冲则回到队列尾部,成为新的后缓冲。光栅化到底发生了什么?至此,我们已经知道了“帧缓冲里的画面是怎么上屏的”,也知道了“交换链和垂直同步如何协调GPU渲染与屏幕刷新”。现在GPU可以写新的后缓冲了,但显示控制器立刻开始读新的前缓冲——GPU和显示控制器又开始竞争。
2026-09-11 16:12:42
367
原创 图形渲染上屏(一)-上屏机制--从帧缓冲到物理显示设备
知道一个知识点在整个流程中的位置,比孤立地记住它更重要。所以我们需要画一张“图形渲染上屏”的地图。画地图有一个诀窍:从你熟悉的地方出发。
2026-09-10 19:22:11
113
原创 Unity 渲染批处理 Static Batch(Editor/Runtime) & SRP Batcher & GPU Instancing & Dynamic Batch
同一个 Renderer 同时满足多种批处理条件时,URP 最终按以下顺序决定怎么画。
2026-09-08 17:23:07
112
原创 Unity性能优化_动画
在项目开发过程中,动画表现需要考虑到其实现的经济性与适合的应用场景。PS:粒子特效可以被视为动画表现的一种形式。但是由于其非线性的特点,不在这里展开描述。
2026-08-27 17:32:06
212
原创 Unity性能优化_Shader_变体
介绍Shader变体的优化方法。shader_feature 和 multi_complie 是两个很相似的预编译指令,声明Keyword(宏标识符)。在Shader代码中控制开启宏或关闭宏时物体的渲染过程。最终编译的时候也是根据这些不同的宏来编译生成多种组合形式的Shader源码。其中每一种组合就是这个Shader的一个变体(Variant)。。
2026-08-26 15:45:19
183
原创 Unity性能优化_UI
与3D场景渲染机制不一样,UI渲染以Canvas为单位进行,CPU负责把UI界面的逻辑结构进行更新,汇总,并负责把这些数据准备好,最后把这些信息传给GPU。
2026-08-26 11:09:07
233
原创 Unity性能优化_粒子特效(Particle System)
对CPU和GPU来讲,是一个性能消耗的大户。以下记录一些针对移动端的优化方式与思考。
2026-08-25 17:34:14
166
原创 使用ILSpy分析C#代码
ILSpy是一个开源的.NET程序集查看工具和反编译工具(ILSpy is the open-source .NET assembly browser and decompiler)。
2026-08-25 17:04:52
149
原创 关于Unity中点击UI按钮以弹出界面时的响应出现延迟的分析
总体说来大概就只有以下6个方面:一 点击按钮时,先请求了网络协议,等有结果返回了再打开界面二 UI Prefab资源过于复杂,加载与实例化时间过长三 UI在Awak和Start函数中进行复杂的逻辑初始化四 UI按钮事件感应区域太小或者设置错误,本次点击是未命中的五 点击关闭界面时,界面有结束动画,在看起来动画已经结束了的时候点击其他按钮,但事件被仍未真正完全关闭的界面阻挡了六 需要打开的UI Prefab中依赖了远程资源
2026-08-19 11:38:19
255
原创 VSCode C# Dev Kit兼容问题
"dotnet.preferCSharpExtension":的值务必为true,即优先使用独立的 C# 扩展意思是:需要安装ms-dotnettools.csharp 扩展,这样可以使用传统的 OmniSharp 工作流。因为对于一些传统的Unity项目工作流,可能会遇到兼容性问题。
2026-07-11 02:26:45
261
原创 VSCode自动编译Unity C#脚本
痛点:在VSCode修改Unity工程的C#代码之后,需要切换到Unity Editor,以便完成代码编译。改变:我们需要在VSCode中修改代码之后按下Ctrl+S能够直接编译C#代码。
2026-05-08 10:22:01
281
原创 Unity Animator核心功能梳理:从BlendTree到Root Motion,一篇搞懂动画系统
在动作表现要求一般的项目中,Unity的动画系统是完全够用的。在不满足项目的需求下,则可以考虑像《永劫无间》一样,基于Unity底层的Playable Graph架构自定义一套动画控制系统。对于Unity的Animator动画系统,本文系统梳理其核心功能,包括 Blending、BlendTree、Layer、Avatar Mask、Override Controller 和 Root Motion,适合想一次性搞懂动画系统的开发者。熟悉了这几个概念,基本就掌握了整个系统。
2026-04-20 09:37:38
456
原创 Unity Library目录使用经验
如果遇到工程环境变化之后导致工程启动,Editor编译,运行时报错,在无法定位具体问题的情况下,可以尝试操作Library目录来解决。但是,不要直接暴力删除整个Library目录,那将导致漫长的重建时间。去针对性的删除特定文件夹下的内容,再重启Unity来解决,将节省大量时间。
2026-04-09 16:44:19
118
原创 MVC实践
就是把Controller层当作数据的搬运工,包含了大量从Model层获取数据发送给View层的代码,这一点是在未违反MVC本身原则的情况下,把代码变得繁琐冗余的错误认知被MVC原则的一种“推论”合理化解释了。MVC是软件架构模式中一个非常基础且广泛传播的概念,是经典的三层架构,分层模型,是一个很有意思的话题,也是面试一般职位时出现频率很高的一个题目。这一概念旨在指导代码,或者说面向对象编程时,如何组织代码的逻辑分类,及分类之间的调用逻辑,也隐含了依赖关系的概念。但是在实践过程中,却充满了乱象。
2026-03-30 15:44:27
64
原创 SVN(3)-集成到Unity Editor
仍然是为了节省在不同编辑器之间切换带来的耗时和降低对思维流延续性的负面影响。所以在Unity编辑器内Project资源管理面板的右键菜单中集成了三种操作命令:更新,提交和查看日志。可以针对文件夹,也可以针对单子个文件进行操作。当提交或者更新或者查看具体文件或者文件夹的日志时,都需要先在Project面板中选中具体的对象。
2026-03-27 23:14:15
81
原创 SVN(1)-基础操作命令
svn commit -m "提交说明" folderAPath folderBPath fileAPath 只提交指定文件夹/文件的修改内容,多个提交项,用空格隔开。svn revert -R folderAPath/ 还原文件夹folderA下的所有修改(包括子目录),./ 指当前文件夹。svn delete folderAPath --force 如果你已经手动删除了folderA。这里最安全的方式是使用ip,主机名可能会遇到无法解析的情况。显示本地文件修改状态,主要有已修改,已删除,未索引等。
2026-03-26 14:40:16
112
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅