自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路!

本博客专注于“技术+创业+学业”三大主题,内容涵盖开发实践、项目管理、课程学习、职业规划等,用通俗易懂的方式解析复杂难题,帮助你从学生到职场完美转型。 每周定期分享干货,欢迎加入交流圈,博主会认真回复每一个问题。订阅,和我一起见成长。

  • 博客(6696)
  • 收藏
  • 关注

原创 为什么 UI 半透明面板会出现“黑边”和“发灰”:一篇把你从玄学里拎出来的透明指南

Sprite 勾 Alpha is Transparency关闭 mipmap临时关闭压缩验证图集 padding ≥ 4(建议 8)检查透明区 RGB 是否干净(必要时让美术处理或工具处理)检查 UI 缩放是否非整数倍,关键元素尽量像素对齐检查 shader 混合方式是否匹配贴图类型(直通 vs 预乘)你想让边缘“透明过渡得干净”,就必须确保边缘采样到的颜色是“正确的颜色”,并且混合方式要跟素材匹配。

2026-02-11 20:10:14 41

原创 透明渲染异常解析:Alpha混合避坑指南

UI 一般在同一个 Canvas 下排序比较稳定。3D 透明才更容易受排序影响。你会发现,所谓渲染异常其实并不神秘。我看到的异常是什么?黑边?发灰?顺序错?穿插?这是“贴图采样问题”还是“混合公式不对”还是“排序/深度问题”?贴图是否 straight 还是 premultiply?shader 是否匹配?深度写入是否正确?透明排序是否可控?色彩空间是否一致?压缩与 mipmap 是否引入污染?你问完这五个问题,基本就能定位问题在哪。

2026-02-11 20:00:52 27

原创 Unity调试Android/iOS库文件:崩溃排查全指南

某个 framework 初始化失败访问权限被拒找不到类/符号先看最后几十行再点到崩溃线程看 call stack明确现象:打包失败?运行崩?回调不回?某机型?Release 才崩?分层定位:Unity层/桥接层/原生层/SDK层收集日志拿堆栈符号化:Android 用 ndk-stack;iOS 用 dSYM/Crash平台最小复现:空工程复现 or 排除其它 SDK验证假设:升级/降级 SDK、开关混淆、替换架构包修复自动化。

2026-02-11 18:22:07 28

原创 Unity外部库配置:把“外援”请进项目的正确姿势

asmdef 这东西很多人嫌麻烦,但它在外部库管理上属于“越早用越省命”。很多团队对外部库配置的理解停留在“能打出包”。任何人拉项目都能构建任何 SDK 升级都有流程、有回滚构建配置可追溯、可自动化出问题能快速定位、快速止血合规与权限清清楚楚,不埋雷做到这一步,你的 Unity 项目就从“野生项目”升级成“工程化项目”了。

2026-02-11 17:48:24 19

原创 游戏大厂技术护城河:你以为他们靠“美术和买量”,其实背后全是硬家伙

先把效果堆满到快上线了才发现低端机跑不动然后疯狂砍特效、降分辨率,画面崩、口碑崩机型分档(低/中/高)每帧预算(CPU/GPU 各多少 ms)每种资源预算(贴图、网格、粒子数量)性能自动回归(每天跑性能测试,发现波动立刻报警)大白话:小厂像装修到入住前才发现电路不够,临时拉线;大厂从设计图开始就算承重、算电路、算水压。玩家会不会来?活动会不会爆?版本会不会翻车?外挂会不会泛滥?竞品会不会抄?流量不确定 → 可扩容架构版本不确定 → 灰度与回滚。

2026-02-11 16:58:44 30

原创 磁盘写入全揭秘:从保存到落盘的8个关键步骤

到了这里,写入请求终于到了存储设备手里。但 HDD 和 SSD 的物理执行差异巨大。应用准备数据 buf调用CPU 进入内核态内核检查 fd、权限、偏移把数据拷贝到 page cache(或直接映射的缓存页)标记这些页为 dirty更新 inode 的 size/mtime(通常先在内存结构里)write()返回(此时通常还没落盘)后台 writeback 线程挑脏页回写,或 fsync 触发回写文件系统把页映射到具体块地址,生成 bio块层合并/排序请求,进入队列。

2026-02-11 13:11:38 22

原创 Unity 3D粒子与UI层级冲突全解析

UI 和 3D 粒子属于两套渲染体系,排序规则不同;透明渲染本来就难排;UI 的 Mask 机制粒子默认不支持。想让它们乖乖听话,要么让它们“同一个导演”(改 Canvas/相机方案),要么把粒子“翻译成 UI”(UIParticle/RT/序列帧)。大白话收尾:你不是在调层级,你是在做“跨系统协作”。把规则统一了,事情就好办;规则不统一,怎么拖来拖去都像在打架。

2026-02-11 02:45:40 26

原创 屏幕分辨率暴涨,游戏为何频频掉帧?

你可以用这一段去给策划/设计/老板解释:屏幕分辨率越高,每帧需要计算和写入的像素越多,GPU 工作量按“宽×高”增长,1080p 到 1440p 不是多一点点,而是接近 1.8 倍像素量;再加上后处理和过度绘制会把像素成本进一步放大,所以高分辨率机型更容易发热降频导致掉帧。解决办法通常不是硬扛 2K 渲染,而是用动态分辨率、分级画质、低分辨率后处理等手段,把体验从“前 5 分钟很爽、后面很卡”变成“全程稳定”。

2026-02-10 15:55:47 149

原创 iOS签名体系全解析:证书、Profile、Bundle ID、Entitlements

iOS 签名就是:你要给某个 Bundle ID 的 App 打包,必须用苹果认可的证书证明你是谁,再拿一张把“AppID+证书+设备/分发类型+权限”都写清楚的 Profile 当通行证,同时你声明的 Entitlements 必须跟苹果后台允许的一致,这样系统才让装、商店才让上架。

2026-02-10 14:45:41 389

原创 Cocos2d-x Android构建:SDK+NDK+JDK全流程拆解

Java 编译产物so资源Manifest转成 dex(D8/R8,属于 Android 构建工具链的一部分)打包成 APK/AABzipalign 对齐签名(debug 用 debug keystore,release 用你自己的)

2026-02-10 14:15:12 30

原创 Cocos2d-x Android环境搭建:SDK/NDK/JDK配置指南

SDK:Android 的“工具箱和材料”,打包资源、装包调试都靠它NDK:C++ 的“翻译工厂”,把 Cocos2d-x 的 C++ 编成手机能跑的 soJDK:构建系统(Gradle)的“发动机”,没有它 Android 工程转不起来配置核心:锁定版本 → 配路径(环境变量或 local.properties)→ 用模板工程冒烟测试。

2026-02-10 13:58:01 19

原创 设计方法到底是啥?(面向过程、面向对象、DDD、TDD……一锅端的大白话指南)

不用 DDD 就是不专业”“不 TDD 就是代码不行”现实世界是成本与收益的权衡。面向过程:按步骤做事,简单直接面向对象:按角色分工,对象协作DDD:业务复杂时先建模、先统一语言、先定边界TDD/BDD:用可执行的验收标准推动设计,给重构上保险事件驱动:用事件解耦系统联动,适合异步扩展表驱动/数据驱动:把规则从代码搬到配置,让变化更便宜组件化/模块化:工程上切积木,提升协作与复用你真正需要记住的不是名词,而是这个思路:设计方法 = 选择一种组织方式,让“变化”更便宜。

2026-02-10 00:27:06 574

原创 设计原则:让你的代码更抗折腾

写代码这事儿,特别像做饭。。后来你发现:能吃不够,还得。。软件设计原则也是同一回事:尽量讲人话,不灌鸡汤,不堆术语。你会看到很多“生活类比”和“翻车现场”。

2026-02-10 00:10:19 502

原创 CI自动化:跑脚本+签名+归档全搞定

然后你发现:你一天没写几行业务代码,全在“打包、签名、传包、发群、解释为什么失败”。人应该做创造性的事情,打包这种重复劳动应该交给机器。这台机器就叫。下面我们就用大白话把 CI 讲透:。

2026-02-09 13:41:24 922

原创 透明物体渲染的步骤(大白话生动版:你以为是“画一下”,其实是“排队、算账、再排队”)

大白话收尾:不透明渲染像盖房子:砖一摞就挡住后面了,很省事。透明渲染像叠玻璃纸:你得从里往外叠,还不能叠太多,否则又乱又累。先把背景画好,再把透明按顺序一层层混进去。

2026-02-08 02:56:11 158

原创 游戏场景山石渲染与性能优化实战

石头要真,靠轮廓、面、粗糙度;石头要快,靠材质复用、LOD、合批和阴影分层。让玩家看到“该看到的细节”,让显卡只干“必须干的活”,这就是山石渲染与性能优化的道。

2026-02-08 01:57:18 104

原创 Unity Audio Mixer 实战指南:声音调校全解析

一句话总结 Audio Mixer 的价值:它让你从“每个喇叭各自为政”升级到“调音台统一指挥”。分组(Group):BGM/SFX/UI/Voice 分类管理参数化(Expose + SetFloat):音量设置不再散落在各处快照(Snapshot):用状态切换做氛围,用 ducking 做对白清晰。

2026-02-08 01:33:59 26

原创 游戏大厂 FPS 射击游戏高精度物理同步方案详解(大白话、生动版)

做 FPS 联机,最容易把人逼疯的,不是枪后坐力,也不是伤害公式,而是玩家一句话:“我明明躲到墙后了,怎么还死了?你以为玩家在阴阳怪气,实际上他可能说的是真话——。但服务器那边判定:你还露着半个肩膀。于是你就“被打死在墙后”。。。。这篇文章就从“大厂 FPS”的视角,用大白话把整套“高精度游戏物理同步方案”掰开揉碎讲清楚。全文偏工程落地,但尽量用比喻讲清楚“为什么这么做”,不是堆名词。

2026-02-07 19:57:36 25

原创 高精度游戏物理同步实战指南

然后你一查:没外挂,是没做好。物理同步这事,跟“同步一个坐标”完全不是一个难度。你同步角色的 X/Y/Z,顶多是“对齐位置”;你同步一堆刚体碰撞、摩擦、堆叠、关节、爆炸、子弹反弹……那是“对齐一个世界”。这篇文章就用大白话,从大厂的视角把“高精度游戏物理同步”讲透:从问题本质、架构选型、到具体落地细节(tick、快照、预测、回滚、插值、校正、带宽、作弊),尽量讲到你能拿去做方案评审的程度。文章比较长,但结构清晰,你可以当作一份“物理同步百科 + 实战指南”。

2026-02-07 19:36:28 27

原创 物理引擎迭代求解器:为什么你的游戏物理总是不稳?

物理世界有很多约束(不穿透、摩擦、弹性、关节),它们互相影响实时引擎无法一次精确解,只能迭代逼近Iterations 越多,约束满足得越充分:堆叠更硬关节更牢摩擦更稳定抖动更小但 Iterations 是用 CPU 换稳定,不能无脑拉满解决不稳要看病因:穿透要 CCD,乱抖可能是碰撞体/时间步/质量比例问题大白话收尾:Solver Iterations 决定稳不稳,本质是:你给物理引擎多少“纠错机会”。机会少,它就草草和稀泥,世界看起来软、抖、乱;

2026-02-07 19:12:20 23

原创 Unity物理引擎:刚体碰撞与力的终极指南

求一个切线方向冲量Jt,用来减少切线相对速度。但它不能超过上限:这就是“摩擦依赖法线力”的来源。法线冲量负责“别穿 + 可反弹”,摩擦冲量负责“别滑”,而摩擦的力度上限由法线冲量决定。场景:一个球(Rigidbody + SphereCollider + 有弹性)落到地面(Static Collider)。刚体提供“可被改变的运动状态”(质量、速度、角速度)碰撞体提供“形状与相交信息”(哪里碰到、法线、穿透)接触点是“结算窗口”(在几个点上结算约束)弹性改的是“法线方向的反弹速度”摩擦。

2026-02-07 19:04:35 19

原创 游戏开发基础:方向向量为什么是目标减自己

从自己到目标的方向向量 = 目标位置 - 自己位置,因为它表示“从起点移动到终点需要的位移”,也就是“终点减起点”。

2026-02-07 02:36:35 25

原创 GPU 是怎么从 VBO 读顶点数据、按 VAO 的“说明书”把它拼成顶点着色器能吃的“结构化输入”的?——用大白话讲清楚这一口“顶点数据”到底怎么喂进去

3 个 float:pos(x,y,z)2 个 float:uv(u,v)5 * sizeof(float) = 20 字节顶点0: [pos0.x pos0.y pos0.z uv0.u uv0.v]顶点1: [pos1.x pos1.y pos1.z uv1.u uv1.v]顶点2: [pos2.x pos2.y pos2.z uv2.u uv2.v]...

2026-02-06 22:06:36 22

原创 Unity空Update性能陷阱揭秘

这就是 Unity 圈子里鼎鼎大名的——。点名本身就要时间,哪怕每个人都回答一句“到”。注意:下面讲的是 Unity 常见实现思路与可以从 Profiler 里验证的事实,不会涉及 Unity 私有源码细节,但你会明白“底层到底在忙啥”。

2026-02-06 21:29:00 27

原创 金属度揭秘:镜面颜色从哪来?——用大白话把 PBR 里最容易搞懵的滑条讲透

做 PBR 材质的人,十有八九都被 **Metallic(金属度)**坑过一次。问题根源在于:很多人把 Metallic 当成“金属强度”“反射强度”“亮度开关”,但它真正想表达的不是这个。非金属的镜面颜色主要来自“光本身”(偏白),金属的镜面颜色主要来自“物体本身的颜色”(带色)。这句话如果你吃透了,你会发现:接下来我们用大白话,把金属度从生活直觉讲到引擎实现,让你知道它为什么这么设计、怎么用不翻车、哪里最容易踩坑。

2026-02-06 16:51:43 25

原创 粗糙度揭秘:高光能量如何分布

你做过材质的话,一定见过 Roughness(粗糙度)这个滑条。很多教程会一句话带过:“Roughness 越大,高光越模糊。这句话没错,但不够“到骨头里”。同样一份光照能量,是集中成一个尖亮点,还是摊成一大片柔光?就看粗糙度怎么“分摊”。你把这句话吃透了,你做 PBR 材质会突然开窍:为什么同样的金属,粗糙一点看起来就“脏”或“旧”?为什么粗糙度错误会导致“能量不守恒”、高光发白或发黑?为什么 roughness 的贴图看起来灰不拉几,但影响巨大?

2026-02-06 16:43:09 20

原创 为啥说 PBR 普及之前的“传统光照模型”(比如 Blinn‑Phong)不统一、没物理约束?——一篇大白话讲透的渲染江湖史

传统光照:像你拿一张照片疯狂加滤镜、拉对比度、抹皮肤在某个角度某个光下能很好看,但一换环境就不稳PBR:像你先把曝光、白平衡、镜头、光源都按现实调对然后你拍出来在各种屏幕上都靠谱所以我们说:在 PBR 普及之前的传统光照模型彼此不统一、没有物理约束,不是在骂它们“垃圾”,而是在描述它们的历史定位:它们是为了性能与可用性诞生的“工程折中”,不是为了跨场景、跨项目一致性而设计的“物理体系”。

2026-02-05 21:50:19 23

原创 三角形正反面之谜:三个点如何决定朝向?

三角形的三个点之所以能体现正反面,是因为“顶点顺序”决定了一个方向;GPU 会在屏幕空间用这个方向(CW/CCW)判定它是正面还是背面,并据此进行剔除与着色。你只要记住这条因果链,很多渲染问题会突然变得很简单:顶点顺序 → 绕序(CW/CCW)→ 正反面 → 是否被剔除/如何着色 → 你看到的结果。

2026-02-05 20:32:52 28

原创 为什么“任何会让 CPU 等 GPU 的操作都很致命”?(大白话生动有趣版)

我想从屏幕拿一个像素看看是什么颜色”“我想立刻知道这个物体有没有被挡住”“我想读回 GPU 算出来的数据做 AI/逻辑”“我每帧都改同一个 VBO/纹理,应该没事吧”“我调试一下 glGet 看看状态”“我把这张纹理既当输出又当输入,省一张 RT”这些基本都可能导致 CPU 等 GPU,轻则性能抖动,重则帧率崩盘。大白话收尾:游戏渲染最怕的不是“忙”,而是“停”。CPU 等 GPU,就像高速公路上突然有人停车问路——不是走不动,是整条路都被你堵住了。

2026-02-05 00:07:54 33

原创 同一堆模型、同一张贴图,换个 Shader 为啥就能“变脸”?——用大白话拆穿这些外观魔法的底层逻辑

Diffuse(漫反射):颜色主要来源Specular(镜面反射/高光):亮点/亮带怎么形成Roughness(粗糙):高光尖还是散Metallic(金属度):高光吃不吃底色,反射强不强Normal(法线):表面朝向细节,决定反射“活不活”Fresnel(菲涅耳):边缘亮不亮(玻璃、水、冰都靠它)Emission(自发光):火焰、霓虹、科幻材质必备Render State(混合/深度/队列):透明、叠加、遮挡顺序把这 8 个旋钮换着拧,你就能在同一张贴图上做出几乎所有“材质幻术”。

2026-02-04 13:31:54 28

原创 NGUI裁剪Shader的底层逻辑与性能优化

把每个像素的位置投到 Panel 坐标系里,跟裁剪矩形做比较;HardClip 直接丢,SoftClip 在边缘按距离衰减 alpha。你掌握了这句话,再看任何 NGUI Clip shader,都能读懂它在干啥。

2026-02-04 03:14:44 28

原创 块压缩解码实战:ETC1/ETC2详解

你可以把 GPU 纹理压缩想象成一件非常“抠门但聪明”的事:手机显存就那么点,带宽也紧张,GPU 还得每秒采样几十亿次纹理。于是工程师们想了个办法——“别把每个像素老老实实存 RGBA 四个通道了,太费。咱们一小块一小块地存:每块先存个大概颜色,再存一堆‘怎么调味’的小指令。用的时候再把这一块‘现煮’出来。这类方法就叫。ETC1/ETC2 就是移动端最典型的一套块压缩格式。

2026-02-03 19:04:21 835

原创 Unity模型动画瘦身:FBX隐形肥肉大揭秘

模型/骨骼/动画分文件删除 cameras/lights/无用节点控制骨骼数、权重数(建议每顶点 ≤4)清理无用 UV、顶点色、历史记录动画导出采样率默认 30fps(特殊动作可提高)BlendShape 必须“有需求才导出”,并标注用途最后用一句大白话收尾:FBX 最可怕的地方不是它大,而是它“看起来不大但里面东西很多”。你不把它拆开、制定规范、自动化校验,它就会在工程里偷偷长肉,最后把导入、构建、运行都拖慢。

2026-02-03 02:54:40 643

原创 iOS 闭包 upvalue 60 上限?三招轻松解决!(大白话生动有趣版)

一个闭包承担太多职责局部变量散落太多数据传递方式不清晰所以你用上面三招,不光能修 bug,通常还能让代码更干净、更容易维护。

2026-02-02 03:20:54 24

原创 iOS 原生 SDK 概念介绍(大白话生动有趣版):framework、xcframework、.a、Info.plist、Capabilities、链接参数、隐私权限,一次讲明白

它给了我哪种库(framework/xcframework/.a)?它要求改哪些 Info.plist 项?它要求开哪些 Capabilities?它要加哪些 Linker Flags/系统库?它会触发哪些隐私权限弹窗?我是否写了对应描述?你能把这五件事说清楚,基本就已经超过了很多“靠试错接 SDK”的同学。

2026-02-02 03:10:41 158

原创 Unity导出Gradle工程vs内部打包:选哪个不踩坑?

Unity 内部 Gradle 打包是快刀,适合日常砍瓜切菜;导出 Gradle 工程是手术刀,适合开胸找病灶。聪明的团队不是选一个,而是把两者当成“不同场景下的两把工具”。

2026-02-02 02:54:14 589

原创 Gradle 依赖版本矛盾(AndroidX/Kotlin 大乱斗)——火锅里啥都下,最后一定糊(大白话实战版:手工解决步骤 + 工具“解决算法”)

你有没有遇到过这种场面:Unity 项目接了一堆 SDK,导出 Gradle 工程一看, 像火锅底料——谁都往里扔一把:然后你一打包:这就是典型的 Gradle 依赖版本矛盾。一句话总结:这篇文章用大白话把它讲清楚,并且给你两套方案:比如你接广告 SDK,看起来就一个 。但它背后依赖:另一个 SDK(比如统计/归因/推送)也依赖这些。依赖一叠加,就会出现“同一个库,不同版本同时被要求”。把依赖来源分成三类就好理解了:大乱斗通常是 2+3 搞出来的。很多人觉得 Gradle 版本选择是玄学。其实它是有

2026-02-02 02:46:58 71

原创 一个典型故事:没有 EDM4U vs 用了 EDM4U 的差别(Unity 接 SDK 的大实话版)

好不容易 Debug 能跑了,老王说:“出 Release 包,开混淆,走线上配置。小李一开原因:SDK 用了反射/注解,混淆把关键类方法改名或裁掉了。这时厂商说:“把我们 proguard-rules.txt 加进去。小李加了一坨,包变大、混淆效果变差,但至少不崩了。

2026-02-02 02:35:42 20

原创 SDK 接入之 External Dependency Manager(EDM4U)有多强?——Unity 依赖管理的“中央厨房”(大白话生动有趣版)

自动拉取:减少手工下载拷贝依赖可见:依赖声明可版本管理版本统一:更容易对齐公共库版本降低重复类:减少 jar/aar 重叠仓库灵活:支持多 Maven 源/私服适配 Unity:把 Gradle 生态能力带进 Unity更适合 CI:构建环境一致性大幅提升依赖可追踪冲突可定位升级可回归构建可复制出事可回滚EDM4U 强大的地方就在于:它让 Unity 项目终于有了像 Android 原生那样的依赖管理基础设施。

2026-02-02 02:11:04 23

原创 SDK 接入中 `proguard-rules.pro` 到底干啥的?——别让“瘦身师”把你关键零件锯了(大白话版)

Step 1:看 SDK 文档有没有 proguard 规则?有没有 consumer rules?有没有 R8 特别说明?Step 2:先按官方加别自作聪明先删减,先让它跑起来Step 3:打 release 包全流程自测登录/支付/广告/推送/埋点闭环不要只测 debugStep 4:如果出问题看 crash 类型查 mapping.txt精确补 keepStep 5:固化规则与版本规则按 SDK 分类存档升级 SDK 时回归测试 + 更新规则。

2026-02-02 01:53:19 23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除