分类:Godot 引擎
学习路径:由浅入深,按顺序阅读效果最好(共 149 篇)
-
101. 纹理导入:VRAM 压缩格式的选择逻辑
PNG 再小也要解码成 RGBA8 上显存,VRAM 占用和磁盘体积是两回事。这篇算清 BC/ETC2/ASTC 的块压缩数学,讲 Godot 四种压缩模式的取舍,以及 export 时按平台选格式的具体配置。
-
102. PackedScene 的序列化格式:.tscn 文本与 .scn 二进制对照
.tscn 和 .scn 装的是同一份 SceneState,只是一个用文本一个用二进制。这篇逐段解剖文本格式的四个区块,对照二进制格式的 RSCC 文件头结构,以及什么场景该选哪种。
-
103. 自定义 ResourceFormatSaver/Loader:让引擎认一种新资源类型
想让 load() 直接读你的存档格式或关卡数据文件,就要实现一对 ResourceFormatLoader/Saver。这篇给一套可运行的存档格式代码,讲清加载链怎么把请求路由到你的 loader,以及缓存和递归加载两个坑。
-
104. 资源热更新:导出后替换 PCK 的可行性边界
Godot 的 PCK 支持运行时挂载补丁包,load_resource_pack 一行就能把下载的资源盖进运行中的游戏。这篇讲补丁包的覆盖语义、ResourceCache 导致热更不生效的坑、脚本热更的限制,以及引擎不管的那半边商用方案。
-
105. PCK 文件格式与加密导出:资源包能不能被解包
PCK 是公开格式的资源包,任何人都能解出你的脚本和贴图。这篇按字节解剖 PCK 的文件布局——为什么目录表在文件尾、GDPC magic 怎么寻址,以及 AES-256 加密导出的真实防护等级。
-
106. TranslationServer:CSV 变 .translation 的导入与运行时查找链
Godot 的多语言不是运行时读 CSV,而是导入期把翻译表编译成二进制 .translation 资源。这篇讲导入格式的细节、TranslationServer 的 locale 回退链,以及 tr() 从调用到拿到译文经过的每一站。
-
107. 音频导入:WAV/OGG/MP3 的解码后端与循环点之谜
三分钟的音乐存 WAV 要 32 MB,存 OGG 只要 3.6 MB,但为什么循环音乐从来不用 MP3?这篇算清三种格式的数据量与解码成本,讲 stb_vorbis/minimp3 后端差异,以及循环点精度问题的物理根源。
-
108. 模型导入:glTF/FBX 到 ImporterMesh 的转换与拆分策略
模型文件进 Godot 不是"加载"而是"翻译":glTF 走内置解析器,FBX 走 ufbx,最终都落成场景节点树加 ImporterMesh 资源。这篇讲导入管线的产物结构、mesh 与 scene 的拆分策略,以及单位/坐标系/材质三个默认就会踩的坑。
-
109. Shader 缓存与变体编译:首次运行卡顿的来源与预热
Godot 4 的 shader 不是加载时编译好的:SPIR-V 变体按需编译造成首次卡顿,引擎用磁盘 pipeline 缓存和 ubershader 异步编译两招缓解。这篇讲变体组合爆炸的数学、缓存的命中条件,以及导出时预热缓存的正确姿势。
-
110. ResourceUID 冲突与工程迁移:合并工程时的 uid 撞车处理
uid:// 引用靠 64 位整数保证唯一,但合并两个工程、拷贝资产目录时撞车仍会发生。这篇讲 uid 的生成结构与生日碰撞概率、撞车后的表现,以及用 ResourceUID 单例手工消冲突的流程。
-
111. 大工程资源扫描优化:EditorFileSystem 缓存与冷启动时间
万级资源工程打开编辑器为什么要等几分钟?答案在 .godot/filesystem_cache。这篇讲全量扫描与增量扫描的成本模型、导入缓存的命中条件,以及把冷启动时间压下来的几个开关。
-
112. SceneMultiplayer 架构:MultiplayerAPI 与 ENet 的组合分层
Godot 高层多人 API 是三层结构:MultiplayerPeer 管字节流、SceneMultiplayer 管编解码与寻址、你的节点脚本管语义。这篇逐层拆开讲,重点解释为什么 NodePath 要做整数缓存,以及换传输层为什么只需改一行。
-
113. MultiplayerSynchronizer 的属性同步:delta 压缩是怎么省带宽的
拆开 Godot 高层网络 API 的两层省带宽机制:MultiplayerSynchronizer 的 delta 同步只发变化的属性,MultiplayerAPI 的 Variant 编码把整数压到最小字节数。基于 4.2/4.3 源码与官方文档。
-
114. RPC 的实现:从 @rpc 注解到字节流,一次远端调用被编码成什么样
@rpc 声明只是元数据,真正发送时函数名被压成整数索引、参数走 Variant 压缩编码。这篇跟一遍 Node::rpc 到 SceneMultiplayer 的编码链,讲清包格式、method 索引为什么必须配 checksum 校验、以及带返回值的 RPC 是怎么实现的。
-
115. ENetConnection:可靠 UDP 的通道模型与传输模式怎么选
Godot 默认走 ENet(可靠 UDP 库),它的核心抽象是通道 + 四种发送标志。这篇讲通道之间为什么互不阻塞、Godot 三种 transfer mode 在 ENet 层的映射、MTU 与分片的边界,以及带宽节流的触发条件。
-
116. 权威服务器与客户端预测:Godot 给了什么、没给什么
Godot 提供权威模型(set_multiplayer_authority + @rpc)和传输,但不提供预测、和解与快照插值——这三件是网络游戏的真正难点。这篇用公式推导客户端预测的状态修正模型,讲清 Godot 各组件在其中的位置。
-
117. 时钟同步与插值缓冲:远端玩家的平滑移动是怎么实现的
渲染远端实体要在"过去"画它:本地时钟先和网络对表,再留一个缓冲深度换取平滑。这篇推导时钟偏移估计的误差界和插值权重的公式,给出缓冲深度与快照频率的权衡曲线。
-
118. WebSocket 与 WebRTC 后端:浏览器平台的传输选择
Web 导出的 Godot 游戏不能用 ENet,传输只剩 WebSocket(TCP 消息流)和 WebRTC(浏览器原生 P2P UDP)。这篇对比两者的队头阻塞、连接拓扑和信令成本,给出按游戏类型选型的决策依据。
-
119. 自定义 MultiplayerAPI:把网络层换成本地日志的离线回放
MultiplayerPeer 是个纯字节流接口,这让"录制线上流量、离线回放调试"成了改一个属性的工作量。这篇讲两个注入点(换 peer vs 换 MultiplayerAPI)的取舍,以及录制格式和回放时钟的设计。
-
120. MultiplayerSpawner 的节点镜像:spawn 出来的节点怎么在两端对齐
MultiplayerSpawner 盯住 spawn_path 下的子树,谁在权威端 add_child,对端就收到一条 spawn 消息并原样重建节点。这篇讲它靠 SceneTree 信号发现节点增删、spawn 消息里到底带了哪些字段、自定义生成函数的适用场景,以及名字冲突和 spawnable 列表不一致这类典型 desync。