- 博客(77)
- 收藏
- 关注
原创 Unity-Technologies/Graphic阅读笔记
这份源码是 Unity 官方的 Scriptable Render Pipeline(SRP)实现
2026-09-22 15:33:59
350
原创 Unity.Mathematics阅读笔记
Unity Mathematics 是一个 C# 数学库,提供具有类似着色器语法的向量类型和数学函数,Burst编译器使用 Unity Mathematics 将 C#/IL 代码编译为高效的原生代码。
2026-09-20 17:17:38
322
原创 UnityReference阅读笔记
UnityCsReference 是 Unity 引擎的 C# 源码仓库,涵盖公开 API、绑定层、编辑器工具及部分托管实现,但不包含核心 C++ 逻辑。其价值在于揭示 C# 与 C++ 的交互机制:通过 extern、FreeFunction 等绑定技术,实现参数封送与跨层调用。
2026-09-15 17:28:34
303
原创 Unity性能优化
普通角色动画优先使用Animator,状态机无法实现的场景才直接手写PlayableGraph。简单少量曲线的UI、Transform动画,可用旧Animation或者Dotween这类补间库;骨骼少、动画资源不多、对动画混合要求低的蒙皮角色可以选用Legacy Animation,需要把控曲线总量;动画和逻辑交互多、动画资源不多的项目直接使用Animator状态机;动作游戏这类动画资源庞大、动画混合与高级效果要求高的项目,适合Animator搭配Playable API、Timeline组合方案。
2026-09-01 14:28:07
257
原创 设计模式小记
抽象工厂用于创建一组相互配套、属于同一个产品族的对象,保证成套资源统一创建,实现上抽象工厂定义整套对象创建接口,具体工厂产出完整一套相关实体,游戏开发中适用于不同阵营套装(人族装备 / 魔族装备)、不同风格 UI 套件、不同主题特效组、不同关卡配套怪物 + 道具组合。public:public:public:void ShowWeapon() override { cout << "人族长剑" << endl;
2026-08-11 20:28:46
282
原创 关于PostgreSQL与MySQL
整体轻量,CPU和内存占用极低,部署简单上手门槛也低,全网生态成熟,问题解决方案齐全,几乎所有云服务器都默认适配,长期迭代下来稳定性极强,极少出现基础BUG。MySQL和PostgreSQL都是目前开源生态中最主流的两款关系型数据库,二者本质作用完全一致,都是以结构化表格的方式存储项目中的用户、订单、业务数据,支持数据增删改查、事务并发、多用户同时访问,适配Java、ASP.NET Core、Python等所有主流后端框架,同时也完美支持Docker容器部署,个人开发和企业项目都能直接使用。
2026-07-31 16:23:44
231
原创 编译原理——笔记
计算机语言由底层到高层为机器语言、汇编语言、高级语言;机器语言是 CPU 可直接执行的二进制代码,汇编用助记符简化二进制、和硬件高度绑定,高级语言语法贴近人类自然语言;将汇编语言翻译成机器语言叫汇编;将高级语言整体翻译成汇编 / 机器码的过程是编译,另有解释型语言无需完整编译,且编译生成机器码后还需链接才能得到可运行程序。编译器的位置处于经过了预处理后的源程序到输出到汇编器之间,输入的是预处理后的源代码,输出的则是汇编器可以理解的汇编语言。
2026-07-28 16:53:40
222
原创 计算机组成原理-笔记
如何理解计算机组成原理呢?如图所示,如果把计算机世界这样划分的话,可以清晰地看到计算机的由软件,硬件与操作系统组成,软件主要涉及的是数据结构,那么硬件主要涉及的就是操作系统。
2026-07-16 14:44:12
240
原创 关于Docker:基本原理介绍与使用
一般来说只有当我们需要与本地截然不同的运行环境(或者需要模拟服务器),但是真正运行的内容又很少不想搞虚拟机的时候,我们就会选择使用Docker来构建一套运行环境支持特定的软件运行。这样,容器本质上仍然是宿主机上的进程,但这个进程被限制在一个独立的“视角”里:它看到自己的进程列表、自己的网络端口、自己的根文件系统和自己的环境变量。用AI的话说就是,当我们需要一个隔离、可复现、可移植的运行环境,又不想使用完整虚拟机时,可以用 Docker 把应用和依赖打包成容器来运行。在 Linux 中,Docker 使用。
2026-07-15 15:02:03
235
原创 Burst编译器的底层原理
Burst编译器是Unity为高性能计算场景(特别是配合C# Job System和ECS)设计的专用编译器,它基于LLVM技术,能将符合其安全约束的C#代码直接编译成高度优化、甚至能自动向量化(SIMD)的原生机器码,从而让这部分代码运行效率接近手写汇编语言。当然,这里还要说一下:Burst只支持脚本后端为IL2CPP。在Unity开发流程中,它作用于(用。
2026-04-05 23:14:56
331
原创 HybridCLR的底层原理
当需要热更新时,系统能够动态加载新下发的DLL文件:动态注册系统会解析并注册DLL中的新元数据到IL2CPP的类型系统中,使其被引擎识别;而对于新增或修改的方法,其IL字节码则交由内置的解释器来执行。解释器负责执行新代码的IL指令,而注册系统负责将热更DLL中的新类型、方法等元数据集成到原有的AOT类型系统中,两者协同使得运行时能够识别并执行新增的逻辑。当您发布一个新的热更DLL时,即使这个DLL文件是完整的,HybridCLR的运行时也能智能地识别出其中哪些类或方法相对于主包中的AOT代码发生了变更。
2026-04-05 16:07:39
498
原创 LZMA和LZ4的底层原理
这些概率值最终驱动一个称为“范围编码”的算术编码器,将整个符号序列编码为一个极长的小数。这种将统计建模与高效熵编码相结合的方式,使其能最大限度地消除信息冗余,从而获得极高的压缩率,但同时也带来了显著的计算与内存开销。而LZ4以速度为绝对优先,其技术路径是极致简化算法流程(快速哈希、直出格式、无熵编码),将压缩解压操作转化为近乎线性的数据搬运,属于“透明压缩”。其过程分为两个核心阶段:首先,它使用一个巨大的滑动窗口进行字符串匹配,将数据流中重复出现的序列替换为指向其首次出现位置的(距离,长度)对。
2026-04-05 15:07:44
136
原创 什么是KCP?QUIC?Websocket?
KCP是一个基于UDP的可靠传输协议,其核心目标是。它并非一个全新的传输层协议,而更像是在应用层对UDP数据包进行可靠性、顺序和流量控制的“增强外壳”。其底层具体来说就是在UDP的基础之上,加入了TCP有的诸如拥塞避免,流量控制等保证可靠性传输的手段,也就是所谓的ARQ机制与窗口协议。(Automatic Repeat-reQuest),即自动重传请求,是传输层的错误纠正协议之一,它通过使用累计确认和超时两个机制,在不可靠的网络上实现可靠的信息传输。
2026-04-05 14:03:05
565
原创 基于OpenGL实现布料模拟
这里的初始法线指的是粒子的法线,而粒子的法线的具体来源则是来源于三角形的面法线——我们会基于三角形的边叉积得到面法线,然后我们将这个法线方向直接给到三个顶点作为法线,这样做的理由是为了所谓的平滑着色——提高渲染后的图形的视觉效果。然后我们就来更新每个粒子的加速度来,显然我们需要先清零粒子的加速度,不然粒子之前受的力的效果始终不会消失,然后我们优先更新粒子的加速度,然后更新弹簧的加速度,最后应用风力的效果。这里则是我们生成三角形的代码,这里是上三角,可以看到三角形的顶点由我们的粒子组成。
2026-03-12 00:12:10
354
原创 SAT高性能碰撞笔记
首先是SAT的基本概念:当然更直观的理解是:然后大致的实现流程应该是:先构建凸包,然后对不同的凸包执行SAT碰撞检测,最后执行Burst编译加速实现高性能。我们从第一个步骤:从 Mesh 表面重建凸多面体的表面表示(faces/half-edge/planes)开始。
2026-03-10 16:14:39
424
原创 操作系统-笔记
操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。它就像是计算机的“大管家”,负责协调和分配所有资源,并为用户和其他软件提供一个方便、高效、安全的工作环境。简单来说,虚拟机(Virtual Machine,常缩写为 VM)就是通过软件模拟出来的一台虚拟计算机。你可以在一台实体电脑上同时运行多个虚拟机,每个都可以安装不同的系统,就像拥有了多台独立的电脑一样。
2026-01-08 20:07:01
872
原创 数据结构与算法-笔记
时间复杂度关注的是算法执行所需时间随输入数据规模增长的变化趋势,而空间复杂度则关注算法运行过程中临时占用的存储空间随输入规模增长的变化趋势。高精度算法是处理超大数字(如成百上千位的整数或浮点数)的计算方法,当数字太大,超出计算机常规数据类型(如int、double)的直接处理能力时,它通过将大数拆分为数字序列(通常存储在数组或字符串中),然后模拟人工竖式计算的过程,逐位处理并管理进位或借位,从而完成加、减、乘、除、乘方、开方等精确运算。i < n;
2026-01-05 21:59:28
880
原创 浅谈——C++和C#差异
虽然这个话题看着似乎有些关公战秦琼的味道,但是作为游戏开发者,C++和C#一定是绕不开的两门语言。不过虽然说是比较二者差异,因为我学习的过程主要是先学C++,所以我先基于C++的认知,再来聊聊C#之中的不同。(为什么会想到写这个帖子是因为我发现老是记混二者名字相同但是底层完全不同的概念,只能说很烦)讨论差异之前,我们先来聊聊大体上二者的相似之处。二者都是编译执行的强类型语言,都是基于OOP思想,都支持泛型。我们首先来聊第一个不同的点——C++的指针。
2025-07-22 17:20:09
3582
2
原创 浅谈——游戏中的各种配置格式
视频中也说了,首先本来游戏的数据就有动态和静态之分,对于静态数据来说,我们只在游戏运行时加载进内存,然后全程只可读不可写,这样避免了频繁的IO操作,也免去了数据库的连接的开销;数据库适合处理频繁更改的动态数据,用于处理多读少写的内容会有浪费。但凡稍微接触过真正游戏开发的人应该都知道,首先游戏中相关的数据其实不是由程序来定的而是策划来填,程序要做的就是提供工具;其次是后续游戏的更新,如果不把数据单独拎出来而是写在代码中,那么每一次更新数据都必须是全量更新(所有代码重新编译),效率非常低下。
2025-07-22 13:38:22
1073
原创 Unity Asset Package——Julhiecio TPS Controller详解
支持瞄具、消音器、握把等配件的安装与拆卸,配件影响武器属性。// 修改瞄准FOV、精准度等属性= null)安装配件时激活配件物体,并修改武器属性。拆卸时则隐藏配件并恢复属性。AI行为树通常由一组节点(Node)组成,每个节点代表一个决策或动作。节点可以是选择节点(Selector)、顺序节点(Sequence)、条件节点(Condition)、动作节点(Action)等。行为树的根节点负责整体决策,子节点负责具体行为。if (!
2025-07-10 16:30:44
1041
原创 Unity插件——ABC详解
ABC是啥?显然不是什么出生在美国的中国人,而是:Ability & Combat ToolkitAbility & Combat Toolkit(简称 ACT 或 ABC)是一款专为 设计的,旨在帮助开发者快速构建复杂、动态的战斗机制和技能效果,无需从零编写底层代码。今天我们就来学习这个插件的内容,了解这个插件是如何实现的战斗系统和技能框架。我们根据代码的结构把这个插件分成这些系统:🔥 核心层 (Core Layer)├── 能力系统 ← 战斗的核心├── 实体管理 ← 对象的基础。
2025-07-10 14:00:32
1645
原创 Unreal引擎——动画系统详解-其二
我们继续之前的内容,这是整个动画系统大致的分类:我们从动画图运行时部分开始:AnimGraphRuntime是虚幻引擎动画系统的运行时执行层,负责在游戏运行时处理所有动画节点的计算和姿势生成。动画图运行时(AnimGraph Runtime)本质上是虚幻引擎动画系统的核心执行引擎和数据流协调器。它由三大核心组件构成:动画节点系统(包括序列播放器、混合空间播放器、各种混合节点和修改器节点,这些节点不是动画资源的简单实例,而是具备运行时逻辑的智能控制器,负责引用动画资源并将其转换为可执行的姿态数据流)、骨骼控制
2025-07-09 22:51:25
1441
原创 C++——手撕智能指针、单例模式、线程池、String
今天我们来学习一下C++中的智能指针,如果有人不知道C++中的智能指针的概念的话:C++智能指针是一种基于RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制的高级内存管理工具,用于自动化动态内存的分配与释放,从而避免内存泄漏、悬空指针等问题。其核心思想是将资源(如堆内存)的生命周期绑定到对象的生命周期上——对象构造时获取资源,析构时自动释放资源目前主流的智能指针包含两种:独占式指针和共享式指针。什么是独占式指针?
2025-07-02 16:31:32
1636
原创 Unreal引擎——动画系统详解-其一
今天我们来学习Unreal引擎的动画系统——对应的Unity没有开放的部分,Unreal是我们学习动画系统最好的地方了。Unreal的动画源码也在官方源码中,有多个相关的核心文件。
2025-06-30 21:44:08
1549
原创 Unreal引擎——Chaos物理引擎(不)详解
今天我们来了解一下关于Unreal引擎的物理引擎——Chaos:这是UE自研的更高级的物理引擎。
2025-06-27 21:29:54
2164
原创 Unreal引擎——Nanite虚拟几何和Lumen全局光照详解
说到UE最突出的技术贡献,我相信Nanite和Lumen这两个名字一定绕不开。Nanite虚拟几何和Lumen全局光照是什么?
2025-06-27 10:38:17
2226
原创 Unreal引擎——AI系统详解
关于优异的AI系统我们大体上可以分为四类: Nav mesh导航网格,感知系统然后是环境查询系统以及我们比较常见的行为树和黑板。UE的Nav Mesh也是基于我们的Recast Navigation实现的,且在此基础上加入了大量的新内容,这个体量过于庞大,我就不展开讲了,跳过这一部分去讲其他的部分吧。
2025-06-26 15:19:53
1416
原创 Unreal引擎——PCG+大世界分区系统详解
通过这个打包过程实现了从PCG高级数据格式到GPU渲染格式的桥接,确保了数十万个实例的自定义属性能够高效地传输到GPU并在着色器中使用,从而实现诸如每棵树有不同颜色、每个石头有不同大小等个性化渲染效果。
2025-06-25 16:51:05
2736
原创 Unity Demo-3DRaceCar详解
在我们的加速过程中,其实真正加速的不是赛车而是我们小车行驶的地面——想象一下跑步机就好了,真正加速的是我们的跑步机而不是我们的人,我们人的绝对位置其实是没有移动的。生成世界片段的函数,可以看到输入参数是一个序号,表示当前世界片段的序号,先创造一个圆柱体,然后把这个圆柱体的transform移动到当前y轴乘以scale和pai最后再乘以序号,方向是正前方向,不难看出这个是我们的周长公式,而为什么要把新的圆柱生成在周长处呢?其实很简单:我们的赛道是一个站着的圆柱形,这个周长就是。
2025-06-14 17:34:31
1950
原创 Unity-NavMesh详解-其一
注意:Region 虽然是不重叠且没有洞的区域,但仍然有可能是凹多边形,无法保证 Region 内任意两点在二维平面一定可以直线到达。后续需要进行轮廓生成和凸多边形生成,为寻路做准备。在这个阶段结束时,我们有形成简化多边形的轮廓。顶点仍然在体素空间中,但是我们正在回到向量空间的路上。许多算法只能用于凸多边形。因此,这一步将构成轮廓的简单多边形细分为凸多边形网格。这是通过使用一个适用于简单多边形的三角形划分(triangulation),然后再将三角形合并为最大可能的凸多边形来实现的。
2025-06-10 16:26:01
2228
原创 Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。Unity官方下有源码,我们下载源码后来学习。ECS与OOP()对应,ECS是一种完全不同的编程范式与数据架构,ECS(实体-组件-系统)以数据驱动为核心,通过组合与分离逻辑提升性能,适用于高并发场景。总的来说,如果场景内有大量的对象或者数据需要处理,我们就可以用ECS来完成以大大提高计算效率。当然,这里还是要提一嘴相关概念,关于DOTS:DOTS是以的高性能开发生态。
2025-06-09 19:07:41
4729
1
原创 Unity-UI组件详解
今天我们来学习Unity的UI的详解,这部分的内容相对较少,对于程序员来说主要的工作是负责将各种格式的图片呈现在显示器上并允许操作这些图片。本篇帖子的理论依据依然是官方开源的UGUI代码,网址为:GitHub - Unity-Technologies/uGUI: Source code for the Unity UI system.我们首先来认识一下UGUI,全称:Unity GUI,开发者习惯称其为UGUI,大体上可以根据功能分为这么几个部分:在工作流程中各个层的作用:我们在Unity或者说UGUI中
2025-06-03 16:39:12
3387
原创 LearnOpenGL-笔记-其十三
什么是基于物理的渲染?简单地说,还记得我们之前学习的法线贴图的内容吗?我们希望不修改物体实际几何形状的前提下去修改表面的法线方向来实现不同的光照效果,实现这个内容的基础就是我们的光照效果是基于某个光照模型——比如布林冯模型来做的,但是这种渲染模式某种意义上不会让你觉得很繁琐吗?因为他太不真实了——物体的光照模型是模拟出来的,然后光照效果也是模拟出来的,我们能否换一种更真实的做法来渲染呢?
2025-06-02 20:31:54
1158
原创 LearnOpenGL-笔记-其十二
看起来似乎非常复杂,但是其实本质上就是:当我们开启SSAO功能之后,我们的屏幕上会多一层四边形,也就是铺屏四边形,这个四边形会检查每一个在屏幕里的像素:准确地说是以每个像素为球心扩展出一个球,然后我们在这个球内容去采样后检查采样点和像素的深度进行比较,比如这个球内采样了一百个点,六十个的深度值小于该像素深度而四十个大于,那么这个像素的遮蔽因子就是0.4,也就是他只会收获到正常亮度的百分之六十。,它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。
2025-05-31 17:33:07
1331
原创 LearnOpenGL-笔记-其十一
又到了介绍法线贴图的地方,我感觉我已经写了很多遍了...法线贴图用最简单的话来介绍的话,就是通过修改贴图对应物体表面的法线来修改光照效果,从而在不修改物体实际几何形状的前提下实现不同于物体几何形状的视觉效果。因此对于法线贴图来说,最重要的内容就是去修改法线贴图对于物体表面的法线。这是我们在物体的片元着色器实现的内容,就是根据法线贴图的内容更换法线。
2025-05-30 23:34:17
1126
原创 LearnOpenGL-笔记-其十
这时候我们就实现了基本的阴影渲染了,这个渲染的过程就是我们先根据之前生成的深度贴图获取到各个片元到摄像机的深度值,然后我们再正常进行渲染的过程,如果这个片元处于阴影之下(深度值更大)我们就把该片元的亮度减小,也就是形成阴影的效果,这样我们就能实现基本的阴影效果了,但是这个效果很“硬”,也就是边缘会产生锯齿。如果我们使用立方体贴图会怎样?我们的纹理是基于显示器的RGB空间来实现的,如果我们采用手动伽马矫正,那么虽然我们的显示器亮度颜色空间变成了线性空间,但是我们的纹理就会收到影响变成完全不同的效果。
2025-05-30 22:02:49
1192
原创 Unity引擎源码-物理系统详解-其三
今天我们来深入了解一下PhysX引擎底层的具体实现,当然话是这么说,但显然我的能力有限,不太可能在这么短的时间全部融会贯通,我就说一下我自己的视角能看到的东西吧。首先整个PhysX引擎干的事情非常简单:就是物理的模拟,那么我们想象一下自己生活中的真实情况:我们在生活中把物体分为了固液气三种形态,于是PhysX也要对物体有一个基本的分类:在计算机中,这样分类的根本原因是为了去写相关的数据结构,比如液体和固体,你写相关基类的时候显然需要的内容不一样。
2025-05-25 11:57:52
1499
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅