记录一下学习godot引擎
Nodes
万物皆节点:
Scenes
关卡:
Tile
1. 文档目标与范围
本文档用于定义 Card-en-Ciel 的完整玩法设计方案,面向以下角色:
- 系统策划:用于拆分规则与参数实现。
- 关卡策划:用于构建关卡、事件、敌人组与节奏。
- 数值策划:用于平衡卡牌、敌人与经济系统。
- 程序与TA:用于确认状态机、流程图、数据结构。
- QA:用于构建玩法测试矩阵与回归项。
本文覆盖:
- 核心玩法循环(局外元进程 + 局内战斗)
- 回合制卡牌战斗规则
- 卡组构筑与成长路径
- 关卡与事件设计
- 难度与平衡理论
- 可观测指标(Telemetry)
- 内容生产规范
0. 为什么需要这份规范
在大多数因 Niagara 导致性能问题的项目中,常见现象并不是"GPU 模拟太慢",而是:
- 渲染线程长时间阻塞在等待 Niagara 系统创建渲染缓冲(
WaitForGatherDynamicMeshElements); - 单帧内大量
CreateRHIBuffer调用; - 关卡里同一资产被复制粘贴几十上百个实例;
- 视野外、远距离的 Ambient 系统没有被正确剔除,每帧仍在渲染线程上分配显存缓冲。
一场战斗打到后半段,帧时间从 22 ms 涨到 44 ms,帧率对半砍。抓 trace 之后发现罪魁是玩家的闪避拖尾特效——它在场景里稳态堆了 702 个存活实例,而玩家每秒最多闪避一两次。
根因在 Ribbon 发射器的 Particle State 模块:三个「让粒子死掉」的开关全是关的,于是组件永远不回池,每闪避一次净增 6 个,攒到 117 次就是 702。
这篇记录整个链条:怎么从 trace 定位到资产、为什么静态审计工具查不出来、运行时怎么在十分钟内实锤根因,以及归因过程中我自己踩的两个坑。数据来自一个 UE 5.x ARPG 项目的 Win64 Development 构建实机 trace。
加密文件
使用Git Bash执行openssl命令更方便。
cd ~/_private
# 加密
openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt -in vn.md -out vn.enc
# 检查加密是否成功
openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 -in vn.enc | head -3
# 解密到t.md
openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 -in vn.enc -out t.md
做存档调试时经常要改档:改角色数值、改背包物品、换装备武器。但 .sav 是不透明的二进制,没法直接看、直接改。这篇记录一个把 .sav 导出成可读 JSON、手工编辑后再导回 .sav 的工具,以及做无损往返时踩到的几个坑——它们都和 UE 的 SaveGame 序列化机制细节相关。
整体只有两条控制台命令,在编辑器或 PIE 里输入:
SaveSystem.ExportSlotToJson <完整.sav路径>
SaveSystem.ImportJsonToSlot <完整.json路径>