BP
C+++BP HYBRID · 混合开发
整个项目底层由 14 个 C++ 源文件驱动(TransformBase 3161 行、CharacterBase 7516 行),表现层逻辑主要在蓝图图表里。
GameMode、主角、敌人、子弹、特效、UI 全部为蓝图资产。这意味着逻辑的可读单元是"图表—节点—引脚",本报告的节点级数据(333/290/140…)正是逐图统计的结果。
悬停查看详情
UE 5.8 · C+++蓝图混合 · 14 源文件 C++ 基类 · 节点级技术解析 · 数据截至 2026-09-30 · By JasonYang
一款修仙类型的第三人称RPG,由蓝图与C++共同构建
玩家可操纵修仙者,自行选择要修炼的功法,能自己炼制属于自己的法宝,大道无情,要在这个残酷的修仙世界活下去,就得先让自己变得更强!本报告基于实时项目文件以及资产,通过二进制解析和UE编辑器的实时Blueprint读取,去拆解游戏项目的各项制作过程和功能解析。
Explanation: This game project was developed by Jason Yang, a dual master's degree student in Computer Science and Artificial Intelligence at Arizona State University. It is Jason Yang's graduation project, with gratitude to his advisor for their guidance and thanks to everyone for their support!
证据分级:UE 编辑器实时蓝图读取(节点级,含引脚连接)> 离线 uasset 二进制解析 · 全部来源见文末 K1–K12 锚点表 · 所有数字忠实转录原文(All project data and production are from JasonYang)
§0 · 摘要 Executive summary
修仙题材第三人称动作 RPG——角色以地面战斗为主,遁光(右键)/闪现(LeftShift)提供快速位移,所有移动由 C++ 基类(TransformBase + CharacterBase)驱动底层、蓝图承载表现层。
项目的逻辑密度高度集中在主角 CharacterBlueprint 上:9 个图表、39 个变量,其中输入图 InputEventGraph 一张图就有 333 个节点,五段连击图 Attack 有 290 个节点——两张图承担了主角八成的逻辑量。表现层的体量同样可观:特效库 Content/Effect 独占 495 个文件,超过总资产 943 个文件的一半;角色资产 242 个文件中仅 角色 的动画就有 153 个。
| 核心数字 | 值 | 说明 | 来源 |
|---|---|---|---|
| 资产文件总数 | 943 | Content/ 全部游戏资产,逐文件离线解析 | K1 |
| 主角 CharacterBlueprint | 9 图 / 39 变量 | 父类链:TransformBase → CharacterBase(纯 C++ 基类,非 UE 原生 Character) | K2 |
| InputEventGraph | 333 节点 | 全部输入响应与技能触发入口 | K2 |
| Attack 连击图 | 290 节点 | 五段连击,Combo1~Combo5 蒙太奇 | K2 |
| Effect 特效库 | 495 文件 | 特效蓝图 21 + Niagara 34 + 贴图 243 等 | K6 |
| Characters 角色资产 | 242 文件 | CharacterSkeletalMesh 230 + 敌人 12,动画 153 个 | K5 |
阅读顺序。本报告按游戏设计逻辑组织:先框架、再主角、再运动/动画、再战斗表现、再敌人与伤害,最后资产总目录。所有节点数均来自对运行中编辑器的实时读取,所有文件数均来自对 943 个 .uasset/.umap 的离线二进制解析;两路数据均截至 2026-07-23。
口径说明。资产五类子项合计 946,与总数 943 存在 3 个文件差异,本文忠实保留原文数字、未做归一;NPCBlueprint(第二角色)尚未深入读取,Config 使用传统输入系统而非 Enhanced Input。
§0.5 · 知识地图 Mind map
从项目框架到分析方法,整份文档的骨架可以一次展开、逐层下钻。
§1 · 项目框架 Framework
引擎 5.8、14 源文件 C++ 基类(TransformBase 3161 行、CharacterBase 7516 行)传统输入系统(ActionMappings,非 Enhanced Input)——C++ 覆盖底层逻辑(遁光/战斗五连/蓄力/护盾/昼夜/六剑),蓝图承载表现层(蒙太奇/特效/动态材质)。
C+++BP HYBRID · 混合开发
整个项目底层由 14 个 C++ 源文件驱动(TransformBase 3161 行、CharacterBase 7516 行),表现层逻辑主要在蓝图图表里。
GameMode、主角、敌人、子弹、特效、UI 全部为蓝图资产。这意味着逻辑的可读单元是"图表—节点—引脚",本报告的节点级数据(333/290/140…)正是逐图统计的结果。
悬停查看详情
KAWAIIPHYSICS · 发丝衣物物理
角色表现的关键插件:发丝、衣物、飘带的物理摆动。
CharacterAnimationBlueprint 的 AnimGraph 末端串联了 6 级 KawaiiPhysics 节点,共用 DA_Kawaii_Physics 的 LimitAngleCurveData——多组骨骼链的摆动参数集中管理。
悬停查看详情
GRAPH-LEVEL READING · 逐图逐节点
整棵蓝图树被完整展开:9 张图表、39 个变量、引脚级连接。
CharacterBlueprint 的 InputEventGraph 有 333 个节点、Attack 连击图 290 个节点、敌人 伤害图 140 个节点——全部节点与引脚连接逐一读取、计数并制图,没有抽样估算。
悬停查看详情
默认地图为 RealBiomes_TestEmpty(定向光 + 高度雾的空测试场景),游戏模式 GameMode(GameModeBase)。输入采用传统系统而非 Enhanced Input:
| 输入 | 键位 | 类型 |
|---|---|---|
| Move Forward / Backward | W / S | 轴 |
| Move Right / Left | A / D | 轴 |
| Move Up / Down | Q / E | 轴(飞行升降) |
| Turn / Look Up Mouse | MouseX / MouseY | 轴 |
| Sprint 冲刺 | LeftShift | 动作 |
| Dodge 闪避 | SpaceBar | 动作 |
| Aim 瞄准 | 鼠标右键 | 动作 |
启用插件:KawaiiPhysics、ModelingToolsEditorMode、GameplayBehaviors、编辑器数据接口插件(实验性);EditorUIScale 未启用。项目根目录另有 Houdini 工程 HillStone.hip(山体/石头程序化模型源文件)。
§2 · 主角系统
CharacterBlueprint 的九个图表里,InputEventGraph 与 Attack 两张图合计 623 个节点——剩下的七张图都是辅助。
父类链:TransformBase → CharacterBase(纯 C++ 基类)。9 个蓝图图表 + 底层 C++ 函数,14 个源文件支撑。
— 项目技术总览 · 第二章, 2026-07-23
ContextCharacterBlueprint 包揽输入、连击、瞄准、雷电、相机与后处理。 Why it matters逻辑集中于单蓝图意味着任何改动都要在这 9 张图里定位——节点密度图就是这张地图。
ComboAttack 从 ST_AnimMontage 结构体拆出 Combo1~Combo5 五段蒙太奇,按 ComboNumber 选段播放;ReadyToCombo 窗口内再次输入则续段,否则 ResetAttack 清零。攻击状态由动画通知驱动:ComboAttackNotify 进入攻击(IsAttacking=true、关闭朝向跟随、限速 300),ResetAttackNotify 退出并恢复 HoverFlySpeed。连击同时生成 BezierBulletEffect 贝塞尔追踪弹与 Attack03/05 特效。
右键 CE_AimStart 进入瞄准(相机拉近、UW_Aim 准星显示),CE_AimTrace 定时扫描敌人填入 AimTargetArray 并分配锁定目标。雷电是蓄力链式攻击:ChargeCompleted 后沿 EnemyArray 在多个 敌人 间链接(分叉 _Branch / 弹射 _Bounce),UW_LightningTrace 绘制连线 UI,技能期间切换后处理材质。39 个变量按移动 / 连击 / 镜头 / 瞄准 / 雷电 / 后处理六组组织。
§3 · 运动系统 BPC_MotionComponent
挂在 CharacterBlueprint 上的 ActorComponent:27 个变量、10 个函数,管双速态飞行、Lean 倾斜与相机弹簧臂。
| 状态 | 参数组 |
|---|---|
| 悬停 | HoverFlySpeed / HoverAcceleration / HoverRotationRate |
| 冲刺 | SprintFlySpeed / SprintAcceleration / SprintRotationRate |
双速态由 SetSprintEvent / SetAimingEvent 切换,IsAiming 时进入瞄准飞行参数。Tick 中记录前后两帧速度朝向,由 YawVelocityDifference / PitchVelocityDifference 实时算出 Lean 倾斜量,供动画蓝图驱动身体倾斜。相机弹簧臂合成图(61 节点)按 TargetSocketOffset / TargetLength / InterpSpeed 平滑插值:瞄准时拉近、冲刺时拉远。HitEvent 负责受击时打断当前运动状态。
§4 · 动画系统 CharacterAnimationBlueprint
数据流单向而清晰——CharacterBlueprint / BPC 计算状态变量,CharacterAnimationBlueprint 每帧读取并驱动骨骼姿势。
AnimGraph 26 节点 + EventGraph 127 节点。主姿势管线:Default 状态机缓存为 LocalMotion → HeadLookAtNode 注视(IsLookAt 且 InRange 时混入)→ Montage Slot(连击注入点)→ AimPoseNode 瞄准姿态(IsAim 时混入)→ 6 级 KawaiiPhysics 串联 → 输出姿势。EventGraph 由 BlueprintUpdateAnimation 驱动,其中 SetNextSection 出现 6 处——连击蒙太奇段落衔接、连击流畅度全靠它。
| 转移 | 条件 |
|---|---|
| Idle/Hover → Start | IsSprint = true |
| Start → MoveLoop | Start 动画剩余时间比例 < 阈值 |
| MoveLoop → MoveEnd | NOT IsSprint |
| MoveEnd → Idle/Hover | MoveEnd 剩余时间比例 < 阈值 |
| 中断回退分支 ×2 | IsSprint / NOT IsSprint |
角色资产支撑(CharacterSkeletalMesh,230 文件):骨骼网格 + 物理资产、IKRig + IKRetargeter(MagicalAnimSet 动画重定向到 角色 骨骼)、动画 153 个(Motion / Self / Retargeter≈100 / UseMontage 13)、混合空间 5 个、材质 15、贴图 48。
§5 · 特效与弹道 Effect
495 个文件的特效库里,真正"会动"的逻辑集中在 EF_BaseEffect 继承树的四个子类上。
BezierBulletEffect 是弹道系统的技术高峰:105 节点 EventGraph + 3 函数。TraceTarget(27 节点)搜索敌人填入 EnemyArray;CE_BezierMove 由 TimelineHasEnemy 驱动,用三控制点 3SpotPosition 计算贝塞尔曲线追踪目标;无敌人时退化为直线/散射。命中后 ApplyDamage(携带 DamageType)→ 生成命中特效 → 停双时间轴 → 销毁。
| 子目录 | 数量 | 作用 |
|---|---|---|
| Textures/ | 243 | 噪声、遮罩、拖尾、SubUV 序列帧、光斑 |
| MaterialInstance/ | 88 | Ribbon 拖尾、Simple、Smoke、Refraction、PostProcess |
| Common/ | 56 | 通用 Niagara 发射器/模块/材质 |
| Niagara/ | 34 | NS_* 粒子系统:Attack 27 / Enemy / Motion |
| Meshs/ | 30 | 环 Ring、螺旋 Helix、锥、样条、石头 |
| MaterialFunction/ | 11 | 高斯模糊、法线推导、FlipBook、消散、POM |
| Curve/ · VectorFields/ | 5 / 4 | 曲线资产 · 湍流/涡旋矢量场 |
§6 · 敌人系统 EnemyBlueprint
EventGraph 76 节点管巡逻,Damage 图 140 节点管受击与死亡——死亡反馈比巡逻逻辑厚一倍。
巡逻 AI 用定时器刷新随机巡逻目标点,TraceLand 向下探测地面防止撞地。受击走 AnyDamage:记录命中方向与位置 → 扣 HP → ColorDamage 曲线驱动动态材质受击变色。死亡 CE_Death 是一套组合拳:爆炸特效 + EnemyBlueprintDestroy 残骸(GeometryCollection 混沌破碎)+ FieldSystem 力场冲击 + EnemyExplosionEffect 镜头震动,最后 CE_Reborn 在刷怪点重生完成循环。
§7 · 伤害 · 镜头 · UI
攻击方按技能携带 Sword / Lightning 伤害类型,BPI_Damage 统一投递,敌人 按类型走不同受击反馈。
| 体系 | 数量 | 成员 |
|---|---|---|
| Damage/ | 8 | BPI_Damage 接口、DamageType ×4(Base/Lightning/Sword/通用)、EM_DamageType 枚举、颜色曲线 ×2 |
| AnimNotify/ | 7 | 连击判定帧、重置连击、动画帧生成子弹、运镜一次性设置 + 持续镜头震动、技能移动锁、技能运镜 |
| CameraShake/ | 4 | 敌人 爆炸、崩山爆炸、雷电爆炸、飞行 |
| Widget/ | 4 | UW_Aim 准星(81 节点,世界→屏幕坐标 + 锁定变色)、UW_AimTarget、UW_LightningTrace、C_UW_Aim 曲线 |
§8 · 战斗总链路 Combat chain
主链路每帧运转,普攻 / 瞄准 / 雷电三条技能链在伤害处合流,受击链在 敌人 侧闭环。
组成关系上,GameMode 只挂两棵子树:主角 CharacterBlueprint(带 BPC 运动组件、AB 动画实例、蒙太奇结构体、战斗 UI 与子弹生成)和敌人 EnemyBlueprint(巡逻 AI、Damage 图、死亡破碎链)。战斗的全部复杂性都发生在这两棵树之间。
§9 · 资产总目录 Assets
特效库 495、角色 242、MagicalAnimSet 商城动画包 152、核心玩法蓝图 32、场景素材 25。
核心玩法蓝图只有 32 个文件,却定义了全部规则;真正占体量的是"看起来和动起来"的资产——特效、动画、贴图。地图只有两张:默认启动的 RealBiomes_TestEmpty(定向光 + 高度雾的空场景)和动画包自带的 Showcase 演示关卡。
§10 · 附录 Appendix
两条数据通路:离线二进制解析拿文件级事实,编辑器实时读取拿节点级事实。
| 工具(_AgentTools/) | 用途 |
|---|---|
| editor_link.py | 编辑器实时数据通道客户端(Socket 直连,处理延迟响应) |
| editor_cli.py | 命令行调用编辑器数据接口工具 |
| dump_bp.py | 导出任意蓝图的概览 + 全部图表节点 JSON |
| digest_nodes.py | 把节点 JSON 转成可读摘要 |
| analyze_assets.py | 离线 .uasset 批量分析 |
复现注意。Git Bash 下运行需加 MSYS_NO_PATHCONV=1(否则 /Game/ 路径会被转成 Windows 路径);编辑器重启后需在项目设置中确认实时数据接口保持开启,方可继续读取蓝图节点。
已知限制。read_graph_dsl 对既有图表返回空(DSL 主要用于写入),节点级读取用 find_nodes / get_node_infos 替代;NPCBlueprint(第二角色)尚未深入读取;Config 使用传统输入系统而非 Enhanced Input。
§10 · C++ 核心模块
14 个源文件 · TransformBase 3161 行 · CharacterBase 7516 行。遁光飞行、战斗五连、昼夜循环、六剑环绕——这些功能的"底层"由 C++ 负责,蓝图管"表现层"。遁光静默退出三修 V171 是迭代实证。
TransformBase 3161 行
右键遁光(TransformToForm / 右键进入半透明高速态)+ MPC 溶解过渡;2026-09-29 新增 AI 专用遁光接口(h:419-432)复刻完整时序。遁光静默退出 V171 三修记录完整。
点击查看
CharacterBase 7516 行
五连普攻、三连追踪弹、闪电链、蓄力普攻、E键护盾。OnMontageEnded 回调保证状态一致性。
点击查看
TimeOfDay 969 + SwordQ 581
昼夜单例统一驱动三处共享(光照/后处理/材质);六剑 Q 键系统 Tick 圆周轨道。
点击查看
§10.5 · AI 敌人系统(2026-10-01 最新迭代)
AIController + BehaviorTree(Selector) + Blackboard(bEngaged 黏性 100m 锁定 / 350m 才解除)+ CharacterEnemyBlueprint 子蓝图 + C++ ForAI 遁光接口。6 资产 PIE 端到端全绿;10 条实测定案踩坑。
AIC + BT + BB + Pawn 子蓝图
Root → Selector(回家/战斗追击/待机);服务每 0.5s 检测;AutoPossessPlayer=Disabled 防 PIE 抢占。
点击查看
距离段分档攻击
<15m 普攻五连(调蓝图 IsAttack 事件 + 5 段蒙太奇 + 追踪弹 ApplyDamage 20);15~50m 闪电;50~150m 瞬移飞行。
点击查看
C++ ForAI 接口 + 5 连
ExecuteEnter/ExitTransformForAI(CharacterTransformBase.h:419-432)复刻右键遁光完整时序;AI 追击到 12m → 五连。玩家侧已泛化 Tag="Enemy"。
点击查看
§11 · 功能研究 Pilot study
项目并非纯蓝图:主角底层由 C++ 基类驱动(TransformBase 遁光、CharacterBase 战斗、TimeOfDay 昼夜、SwordQ 六剑),表现层大量逻辑仍在蓝图图表里。
当前角色(CharacterBlueprint)底层由 TransformBase(C++,3161 行 .cpp)驱动形态变换:右键遁光进入半透明高速态(MPC 溶解过渡)、左键普攻五连、长按蓄力剑气、LeftShift 闪现、Q 键六剑环绕、E 键护盾、瞄准(右键瞄准态)。蓝图图表承载表现层(蒙太奇、特效、动态材质),C++ 负责底层时序与守卫(遁光静默退出三修 V171 迭代实证)。
开发记录 · 9 个问题与修复
从输入绑定、形态切换、飞行控制到 Niagara 速度传递的完整实现记录。
点击查看
逐行解析 · .h / .cpp
TransformCharacter 角色基类逐行注释,附关键变量速查表与废弃代码清单。
点击查看
WASD + LeftShift · 空中四向
蓝图 OnDashInput 链 vs C++ AirDashFunction 对照,穿模修复五版迭代,特效清单精确到资产路径。
点击查看
V61 统一曲线 · 三处共用
夜景 AutoExposureBias 压暗 + 角色材质 EffectBrightness 缩放 + 技能特效 MPC EmissiveScale 昼夜曲线。
点击查看
castDynamicShadows 踩坑
方向光动态阴影开关被 DaySequence 关了导致植被纸片化,MCP 程序化 set + 回读 + 保存一次解决。
点击查看
上半身分层 Slot
SaveCachedPose + LayeredBoneBlend 实现蓄力抬手与腿部动作叠加,短按保留普攻连招。
点击查看