分类:Godot 引擎
学习路径:由浅入深,按顺序阅读效果最好(共 149 篇)
-
121. 带宽优化:bit 打包与量化,把 Transform 压进 64 位
默认 RPC 把 Vector3 当三个 double 传,一个 Transform 要 112 字节;量化 + bit 打包能压到 12 字节以下。这篇给量化误差的数学界、手写打包器的位布局方法,以及什么时候该用 Godot 4.3 内置的 PackedByteArray 编码助手。
-
122. 大厅与匹配:Steam/Nakama 集成思路,Godot 只管传输不管社交
Godot 的多人 API 到"连上某个 IP"为止,大厅列表、房间创建、玩家匹配全都不管。这篇讲用 Steam 大厅或 Nakama 补这块的标准架构:大厅数据存哪、matchmaking 怎么分、如何把第三方会话翻译成 ENet 连接。
-
123. 网络调试:模拟延迟与丢包,本地把 200ms 延迟玩出来的方法
网络 bug 在 localhost 上永远复现不了,因为 RTT≈0、丢包率≈0。Godot 没有内置的延迟模拟,这篇讲三种本地劣化方案:手写 UDP 代理在应用层加延迟、macOS/Windows 的系统级工具(pfctl/clumsy)、以及 ChaosMonkey 式随机断连测试。
-
124. AudioServer 的软件混音器:bus 树的实时混音
Godot 不用系统混音器,自己在音频线程里做软件混音:所有 AudioStreamPlayer 把采样累加进各自 bus 的浮点缓冲,再沿 bus 树逐层流向 Master。这篇讲 mix 步骤的遍历顺序、效果器实例的挂接方式、音频线程与主线程的锁边界。
-
125. AudioStream 的解码与环形缓冲:流式播放为什么不会卡顿
一首 3 分钟的 OGG 只有 4MB 文件却要在播放的每一帧都按时交出采样,解码器和消费端的速度 mismatch 用环形缓冲抹平。这篇讲 AudioStreamPlayback 的 mix 契约、流式 buffer 的补齐时机(低于 1/3 阈值回填)、以及随机访问流和顺序流的实现差异。
-
126. 3D 空间音频:距离衰减与多普勒,AudioStreamPlayer3D 的衰减模型
AudioStreamPlayer3D 在 mix 前把单声道源按听者位置算衰减、声像和多普勒音高偏移,再交给普通立体声混音。这篇讲距离衰减三种模式的数学形式、双声道声像的正弦平移法、以及多普勒为什么只调 playback 的 pitch 不动数据。
-
127. AudioStreamPlayer 的播放调度与 pitch:变调不变速的实现
play() 之后声音不是立刻出来,而是要等设备缓冲轮转;pitch_scale 改的不是音频数据而是重采样相位步长。这篇讲播放调度的内部状态机、seek 与 start offset 的差异、以及为什么 pitch 变化音高和时长一起变。
-
128. 音频总线效果器:自带 DSP 一览,混响和压缩器的参数含义
Godot 自带二十多种音频效果器,混音器(八-1)在每路 bus 上就靠它们整形声音。这篇按用途分组梳理常用效果器、讲清混响的预延迟/衰减/扩散三个核心参数背后的物理意义、以及压缩器阈值与比率怎么调。
-
129. 音乐节奏游戏的延迟校准:输出延迟从哪来、怎么测
节奏游戏对音频延迟的容忍度在毫秒级,而 Godot 的默认配置端到端延迟可能有 50ms 以上。这篇拆延迟的四个组成部分、讲怎么用手机慢动作录像实测延迟、以及 Input 时间戳和 audio clock 对拍的实现方法。
-
130. AudioStreamGenerator 实时合成:在 GDScript 里手搓波形
AudioStreamGenerator 把混音器变成一个你往里推采样帧的接口,这篇讲 push 模型背后的环形缓冲、相位累加器合成正弦的原理、以及缓冲深度和延迟的权衡公式。
-
131. 录音与麦克风输入:AudioEffectCapture 的回采
想做语音、音游收声或实时特效,就得把麦克风的音频流接回游戏逻辑。这篇讲 AudioEffectCapture 挂总线的回采模型、环形缓冲容量公式、跨线程读数据的正确姿势和丢帧诊断。
-
132. OGG/MP3/WAV 后端差异:解码进内存还是流式
三种音频格式在 Godot 里走完全不同的解码后端和内存路径:WAV 原样进内存,OGG 用 stb_vorbis 流式解码,MP3 的循环缝隙是先天缺陷。这篇给解码路径、内存账和循环点坑的对照。
-
133. 混音线程:AudioServer 的锁竞争实测 —— 音频线程和游戏线程的边界
音频线程每 10.7ms 必须完成一次混音,游戏线程的任何鲁莽 API 调用都可能去抢同一把锁。这篇拆 AudioServer 的线程模型、哪些调用真会进临界区、以及一个放大锁竞争的实测方法。
-
134. 交互式音乐:分层音轨的切换实现 —— 用同步播放做无缝过渡
战斗激烈度上来时音乐怎么"加乐器"而不跳拍?这篇讲 vertical layering 的同步播放原理、等功率交叉淡入的数学,以及 4.3 引入的 AudioStreamInteractive 是怎么把这件事收进引擎的。
-
135. 音频资源热加载的坑 —— 播放中替换 stream 会发生什么
运行时换 AudioStreamPlayer 的 stream 看似简单,实际会把 playback 状态整个炸掉。这篇讲服务器侧 playback 句柄的解绑语义、三种无缝换流方案和运行时 load_from_buffer 的动态音频路线。
-
136. AnimationMixer 的重构:AnimationPlayer/AnimationTree 的统一底座 —— 4.x 为什么多出一个基类
Godot 4 把动画播放的公共逻辑从 AnimationPlayer 里抽成了 AnimationMixer,AnimationTree 从此和 AnimationPlayer 平级。这篇讲这次重构拆出了什么、ActiveAnimation 列表怎么驱动混合求值、以及它对写动画代码的实际影响。
-
137. AnimationTree 状态机:blend tree 的求值顺序 —— 图节点的拓扑排序
AnimationTree 的 blend tree 不是每帧"跑一遍图",而是按依赖关系做拓扑排序后从叶子到根求值。这篇讲 AnimationNode 的输入输出模型、求值顺序怎么定、BlendSpace2D 的重心坐标插值,以及同步节点的时钟语义。
-
138. 骨骼动画:Skeleton3D 的 rest 与 pose 双变换 —— 骨骼矩阵的两套坐标
Skeleton3D 里每根骨骼同时存 rest(绑定姿势)和 pose(动画姿势),全局矩阵是两套沿骨骼链复合的结果。这篇讲双变换的数学、动画 track 为什么只存 pose 增量、以及 rest 不一致导致的重定向问题。
-
139. 逆运动学:IK 节点的求解 —— FABRIK 与 CCD 算法在引擎里的实现
正向运动学是"转关节算末端",逆运动学反过来:给定末端目标反解关节角。这篇推导 CCD 和 FABRIK 两个经典算法的更新公式,讲 Godot 4.4 SkeletonModifier 栈里 IK 的实现位置和它们的适用边界。
-
140. 后处理链:tonemap/glow/SSAO 的 render pass 顺序 —— 一张像素从场景到屏幕的路
3D 场景的 HDR 画面要经过 SSAO、SDFGI、体积雾、tonemap、bloom、FSR 一串 pass 才上屏。这篇按 4.4 源码顺序拆每个 pass 的输入输出和依赖,告诉你改画质选项时帧时间花在哪。