006 T03 — 蓝图操作指南

T03 --- 蓝图操作指南

文档版本 : 1.0

创建日期 : 2026-07-17

关联任务 : T03(角色基类与移动系统)

关联设计文档 : plans/P0-T03-Design.md

目标读者: UE 蓝图新手,需要详细的步骤指导


一、前置准备

1.1 环境检查清单

在开始创建蓝图资产之前,请确认以下条件已满足:

# 检查项 验证方法 预期结果
1 UE 编辑器已启动 打开 XiYou 项目 编辑器界面正常显示
2 C++ 代码已编译 Live Coding 或 VS2022 编译 编译成功,无 Error
3 MCP Server 已运行 控制台输入 ModelContextProtocol.StartServer 控制台输出 Server 启动信息
4 NavMesh 已配置 测试地图中放置 NavMeshBoundsVolume 绿色区域覆盖可行走地面
5 PlayerStart 已放置 测试地图中放置 PlayerStart 角色生成位置正确

1.2 启动 MCP Server

MCP(Model Context Protocol)Server 允许 AI 通过工具调用直接操控 UE 编辑器,自动创建和配置资产。

当前状态:已启用 --- 项目已升级到 UE5.8,MCP 插件已在 XiYou.uproject 中启用。

前置条件:启用 MCP 插件

Unreal MCP 是 UE 官方插件(UE5.8 起内置,位于 Engine/Plugins/Experimental/ 目录)。需在 XiYou.uprojectPlugins 数组中启用以下两个插件:

插件名 作用 必需
ModelContextProtocol MCP Server 核心和传输层 ✅ 必需
AllToolsets 编辑器操作工具集聚合插件 ✅ 必需

⚠️ 重要 :仅启用 ModelContextProtocol 而不启用 AllToolsets,服务器能启动但不会暴露任何工具,AI 无法操控编辑器。

当前项目已在 XiYou.uproject 中配置了这两个插件条目。

MCP 插件可用性分析

UE 版本 MCP 插件状态 说明
UE5.6 ❌ 未内置 搜索 Engine/Plugins 目录无此插件
UE5.7 ❌ 未内置 已验证:搜索 Engine/Plugins 无此插件
UE5.8 ✅ 已内置 位于 Engine/Plugins/Experimental/ModelContextProtocol

启动步骤:

  1. 在 UE 编辑器中,按 ~ 键打开控制台
  2. 输入 ModelContextProtocol.StartServer 并回车
  3. 控制台应输出类似 MCP Server started on port 8000 的信息
  4. 确认 AI Agent(如 Roo)已连接到 MCP Server

提示:如果控制台提示命令不存在,请按以下步骤排查:

  1. 确认 XiYou.uprojectPlugins 数组中包含 ModelContextProtocolAllToolsets 两个条目
  2. 关闭 UE 编辑器,重新打开项目(插件变更需要重启编辑器生效)
  3. 编辑器菜单 → Edit → Plugins,搜索 ModelContextProtocol,确认已勾选 Enabled
  4. 如果端口 8000 被占用,控制台运行 ModelContextProtocol.StartServer 8001 指定其他端口

1.3 确认 C++ 编译

T03 的蓝图资产依赖以下 C++ 类,必须先编译通过:

C++ 类 蓝图资产依赖
AXiYouPlayerCharacter BP_XiYouPlayerCharacter 的父类
UXiYouInputConfig DA_XiYouInputConfig 的父类
UXiYouInputComponent PlayerController 输入绑定

编译方法(二选一):

  • 方法 A(Live Coding) :UE 编辑器右下角点击 Live Coding 图标,或按 Ctrl+Alt+F11
  • 方法 B(VS2022) :打开 XiYou.sln,选择 Development Editor 配置,生成解决方案

二、资产创建顺序

按依赖关系排列,必须按以下顺序创建:
#mermaid-svg-5IfF7FmNfLgOYXZa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5IfF7FmNfLgOYXZa .error-icon{fill:#552222;}#mermaid-svg-5IfF7FmNfLgOYXZa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5IfF7FmNfLgOYXZa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5IfF7FmNfLgOYXZa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5IfF7FmNfLgOYXZa .marker.cross{stroke:#333333;}#mermaid-svg-5IfF7FmNfLgOYXZa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5IfF7FmNfLgOYXZa p{margin:0;}#mermaid-svg-5IfF7FmNfLgOYXZa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5IfF7FmNfLgOYXZa .cluster-label text{fill:#333;}#mermaid-svg-5IfF7FmNfLgOYXZa .cluster-label span{color:#333;}#mermaid-svg-5IfF7FmNfLgOYXZa .cluster-label span p{background-color:transparent;}#mermaid-svg-5IfF7FmNfLgOYXZa .label text,#mermaid-svg-5IfF7FmNfLgOYXZa span{fill:#333;color:#333;}#mermaid-svg-5IfF7FmNfLgOYXZa .node rect,#mermaid-svg-5IfF7FmNfLgOYXZa .node circle,#mermaid-svg-5IfF7FmNfLgOYXZa .node ellipse,#mermaid-svg-5IfF7FmNfLgOYXZa .node polygon,#mermaid-svg-5IfF7FmNfLgOYXZa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5IfF7FmNfLgOYXZa .rough-node .label text,#mermaid-svg-5IfF7FmNfLgOYXZa .node .label text,#mermaid-svg-5IfF7FmNfLgOYXZa .image-shape .label,#mermaid-svg-5IfF7FmNfLgOYXZa .icon-shape .label{text-anchor:middle;}#mermaid-svg-5IfF7FmNfLgOYXZa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5IfF7FmNfLgOYXZa .rough-node .label,#mermaid-svg-5IfF7FmNfLgOYXZa .node .label,#mermaid-svg-5IfF7FmNfLgOYXZa .image-shape .label,#mermaid-svg-5IfF7FmNfLgOYXZa .icon-shape .label{text-align:center;}#mermaid-svg-5IfF7FmNfLgOYXZa .node.clickable{cursor:pointer;}#mermaid-svg-5IfF7FmNfLgOYXZa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5IfF7FmNfLgOYXZa .arrowheadPath{fill:#333333;}#mermaid-svg-5IfF7FmNfLgOYXZa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5IfF7FmNfLgOYXZa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5IfF7FmNfLgOYXZa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5IfF7FmNfLgOYXZa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5IfF7FmNfLgOYXZa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5IfF7FmNfLgOYXZa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5IfF7FmNfLgOYXZa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5IfF7FmNfLgOYXZa .cluster text{fill:#333;}#mermaid-svg-5IfF7FmNfLgOYXZa .cluster span{color:#333;}#mermaid-svg-5IfF7FmNfLgOYXZa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5IfF7FmNfLgOYXZa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5IfF7FmNfLgOYXZa rect.text{fill:none;stroke-width:0;}#mermaid-svg-5IfF7FmNfLgOYXZa .icon-shape,#mermaid-svg-5IfF7FmNfLgOYXZa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5IfF7FmNfLgOYXZa .icon-shape p,#mermaid-svg-5IfF7FmNfLgOYXZa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5IfF7FmNfLgOYXZa .icon-shape .label rect,#mermaid-svg-5IfF7FmNfLgOYXZa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5IfF7FmNfLgOYXZa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5IfF7FmNfLgOYXZa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5IfF7FmNfLgOYXZa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. IA_Move
3. IMC_PC
2. IA_ClickMove
4. DA_XiYouInputConfig
5. ABP_XiYouCharacter
6. BP_XiYouPlayerCharacter
7. 配置 BP 属性
8. 验证测试

顺序 资产名 类型 依赖
1 IA_Move InputAction
2 IA_ClickMove InputAction
3 IMC_PC InputMappingContext IA_Move, IA_ClickMove
4 DA_XiYouInputConfig DataAsset (UXiYouInputConfig) IA_Move, IA_ClickMove
5 ABP_XiYouCharacter AnimBlueprint 骨骼 + 动画资产
6 BP_XiYouPlayerCharacter Blueprint (AXiYouPlayerCharacter) ABP_XiYouCharacter, DA_XiYouInputConfig

三、资产创建详细步骤

3.1 创建 IA_Move(移动输入动作)

资产路径Content/Input/IA_Move

资产类型InputAction

手动创建步骤
  1. 在 Content Browser 中,右键空白处
  2. 选择 InputInput Action
  3. 命名为 IA_Move
  4. 双击打开 IA_Move 编辑器
  5. 设置以下属性:
属性 说明
Value Type Axis2D (Vector2D) 2D 轴输入,支持 WASD
Triggers 默认(Down) 按下即触发
  1. 保存资产(Ctrl+S
通过 MCP 让 AI 创建

你可以对 AI 说:

"请在 UE 编辑器中创建一个 InputAction 资产,路径为 /Game/Input/IA_Move,Value Type 设置为 Axis2D (Vector2D)。"

AI 会通过 MCP 工具自动完成创建和配置。

验证
  • Content Browser 中 Content/Input/IA_Move 资产存在
  • 双击打开,Value Type 显示为 Axis2D (Vector2D)

3.2 创建 IA_ClickMove(点击移动输入动作)

资产路径Content/Input/IA_ClickMove

资产类型InputAction

手动创建步骤
  1. 在 Content Browser 中,右键空白处
  2. 选择 InputInput Action
  3. 命名为 IA_ClickMove
  4. 双击打开 IA_ClickMove 编辑器
  5. 设置以下属性:
属性 说明
Value Type Digital (bool) 布尔值,按下/松开
Triggers 默认(Down) 按下即触发
  1. 保存资产(Ctrl+S
通过 MCP 让 AI 创建

"请创建一个 InputAction 资产,路径为 /Game/Input/IA_ClickMove,Value Type 设置为 Digital (bool)。"

验证
  • Content Browser 中 Content/Input/IA_ClickMove 资产存在
  • 双击打开,Value Type 显示为 Digital (bool)

3.3 创建 IMC_PC(PC 端输入映射上下文)

资产路径Content/Input/IMC_PC

资产类型InputMappingContext

手动创建步骤
  1. 在 Content Browser 中,右键空白处
  2. 选择 InputInput Mapping Context
  3. 命名为 IMC_PC
  4. 双击打开 IMC_PC 编辑器
  5. 点击 + 添加映射条目

配置 IA_Move 映射(4个键位):

# InputAction 键位 Modifier 说明
1 IA_Move W 前进(2D Y=+1)
2 IA_Move S Negate 后退(2D Y=-1)
3 IA_Move A Negate 左移(2D X=-1)
4 IA_Move D 右移(2D X=+1)

具体操作(以 W 键为例):

  1. 在 Mappings 列表中点击 + 添加新条目
  2. IA_Move 从 Content Browser 拖入 Action 栏
  3. 在下方 Key 栏点击,然后按下键盘 W
  4. W 键映射完成

配置 S 键(需要 Negate Modifier):

  1. 添加新条目,Action 设为 IA_Move
  2. Key 设为 S
  3. 在 Modifier 栏点击 +,选择 Negate
  4. 这样 S 键的 Y 值为 -1(后退)

配置 A 键(需要 Negate Modifier):

  1. 添加新条目,Action 设为 IA_Move
  2. Key 设为 A
  3. 添加 Negate Modifier
  4. A 键的 X 值为 -1(左移)

配置 D 键:

  1. 添加新条目,Action 设为 IA_Move
  2. Key 设为 D
  3. 无需 Modifier(X 值为 +1,右移)

配置 IA_ClickMove 映射:

# InputAction 键位 Modifier 说明
5 IA_ClickMove LeftMouseButton 左键点击移动
  1. 添加新条目,Action 设为 IA_ClickMove

  2. Key 设为 LeftMouseButton

  3. 保存资产(Ctrl+S

通过 MCP 让 AI 创建

"请创建一个 InputMappingContext 资产,路径为 /Game/Input/IMC_PC。然后添加以下映射:IA_Move 映射到 W(无 Modifier)、S(Negate)、A(Negate)、D(无 Modifier);IA_ClickMove 映射到 LeftMouseButton。"
注意:MCP 可以创建资产和设置基本属性,但 InputMappingContext 的键位映射配置可能需要手动完成(拖拽 InputAction、设置 Key、添加 Modifier)。如果 MCP 无法完成,请手动操作。

验证
  • Content Browser 中 Content/Input/IMC_PC 资产存在
  • 双击打开,Mappings 列表显示 5 个条目
  • 每个条目的 Action 和 Key 正确对应

3.4 创建 DA_XiYouInputConfig(输入配置数据资产)

资产路径Content/Input/DA_XiYouInputConfig

资产类型DataAsset(基于 UXiYouInputConfig

手动创建步骤
  1. 在 Content Browser 中,右键空白处
  2. 选择 MiscellaneousData Asset
  3. 在弹出的 "Pick Class" 窗口中,搜索并选择 XiYouInputConfig
  4. 命名为 DA_XiYouInputConfig
  5. 双击打开编辑器
  6. Native Input Actions 数组中添加 2 个条目:

Native Input Actions 配置:

# InputAction InputTag 说明
1 IA_Move InputTag.Move WASD 移动
2 IA_ClickMove InputTag.ClickMove 左键点击移动

具体操作:

  1. 找到 Native Input Actions 属性
  2. 点击 + 添加 2 个元素
  3. 第 1 个元素:
    • Input Action:从 Content Browser 拖入 IA_Move
    • Input Tag:从标签下拉菜单中选择 InputTag.Move
  4. 第 2 个元素:
    • Input Action:从 Content Browser 拖入 IA_ClickMove
    • Input Tag:从标签下拉菜单中选择 InputTag.ClickMove

注意InputTag.MoveInputTag.ClickMove 标签已通过 C++ 原生定义XiYouGameplayTags.h / XiYouGameplayTags.cpp),C++ 代码编译后自动注册到 Gameplay Tags 系统。如果下拉菜单中看不到标签,请确认:

  • C++ 代码已成功编译(XiYouGameplayTags.cpp 中使用 UE_DEFINE_GAMEPLAY_TAG_COMMENT 定义了 InputTag.MoveInputTag.ClickMove
  • UE 编辑器已重启或标签已刷新
  1. Ability Input Actions 数组留空(T04+ 使用)
  2. 保存资产(Ctrl+S
通过 MCP 让 AI 创建

"请创建一个 DataAsset,路径为 /Game/Input/DA_XiYouInputConfig,基于类 UXiYouInputConfig。然后在 NativeInputActions 数组中添加两个条目:第一个 InputAction 设为 IA_Move,InputTag 设为 InputTag.Move;第二个 InputAction 设为 IA_ClickMove,InputTag 设为 InputTag.ClickMove。"

验证
  • Content Browser 中 Content/Input/DA_XiYouInputConfig 资产存在
  • 双击打开,Native Input Actions 显示 2 个条目
  • 每个条目的 InputAction 和 InputTag 正确对应
  • Ability Input Actions 为空

3.5 创建 ABP_XiYouCharacter(动画蓝图)

资产路径Content/Animations/ABP_XiYouCharacter

资产类型Anim Blueprint

前置:获取动画资产

T03 使用 Lyra 项目或 Fab 免费动画资产(UE5 Mannequin 骨骼)。需要以下动画:

动画 用途 来源建议
Idle 待机呼吸 Lyra MM_Idle / Fab 免费 Idle
Walk 慢走 Lyra MM_Walk / Fab 免费 Walk
Run 快跑 Lyra MM_Run / Fab 免费 Run

获取方式(三选一):

  • 方式 A:从 Lyra 示例项目迁移动画资产到 XiYou 项目
  • 方式 B :从 Fab(fab.com)下载免费 Mannequin 动画包
  • 方式 C :使用 UE5 引擎自带的 ThirdPerson 模板动画资产
手动创建步骤
  1. 在 Content Browser 中,右键空白处
  2. 选择 AnimationAnim Blueprint
  3. 在弹出的窗口中:
    • Target Skeleton :选择 UE5 Mannequin 骨骼(如 SKM_Mannequin_Skeleton
    • Parent Class :选择 UAnimInstance(或自定义的 UXiYouAnimInstance,T03 用默认即可)
  4. 命名为 ABP_XiYouCharacter
  5. 双击打开 AnimBP 编辑器

创建速度变量:

  1. 在左侧 Class Settings 中,添加一个新变量
  2. 变量名:Speed
  3. 变量类型:Float
  4. 勾选 Instance Editable(可选)

配置 Event Graph(更新速度):

  1. 打开 Event Graph

  2. 找到 Event Blueprint Update Animation 节点

  3. 连接以下逻辑:

    Event Blueprint Update Animation
    → TryGetPawnOwner → IsValid?
    → True → GetVelocity → VectorLength → Set Speed
    → False → (无操作)

具体节点连接:

  1. Event Blueprint Update Animation 拉出执行线
  2. 调用 Try Get Pawn Owner 节点
  3. 调用 Is Valid 节点检查 Pawn 是否有效
  4. 如果有效,调用 Get Velocity 节点
  5. 调用 Vector Length 节点获取速度大小
  6. 使用 Set 节点将值写入 Speed 变量

创建状态机:

  1. 在 AnimGraph 中,右键 → Add State Machine
  2. 命名为 Locomotion
  3. 双击进入状态机

创建三个状态:

状态名 动画资产 转换条件(进入)
Idle Idle AnimSequence Speed <= 10
Walk Walk AnimSequence Speed > 10 && Speed <= 200
Run Run AnimSequence Speed > 200

具体操作:

  1. 在状态机中右键 → Add State,命名为 Idle
  2. 双击 Idle 状态,拖入 Play Anim Sequence 节点
  3. Play Anim Sequence 节点的 Sequence 属性中指定 Idle 动画资产
  4. 重复上述步骤创建 WalkRun 状态

配置转换规则:

  1. Idle 拉线到 Walk,双击转换规则

  2. 添加条件:Speed > 10(使用 > 比较节点)

  3. Idle 拉线到 Run,条件:Speed > 200

  4. Walk 拉线到 Idle,条件:Speed <= 10

  5. Walk 拉线到 Run,条件:Speed > 200

  6. Run 拉线到 Walk,条件:Speed <= 200

  7. Run 拉线到 Idle,条件:Speed <= 10

  8. 保存资产(Ctrl+S

通过 MCP 让 AI 协助

"请创建一个 AnimBlueprint 资产,路径为 /Game/Animations/ABP_XiYouCharacter,基于 UE5 Mannequin 骨骼,父类为 UAnimInstance。"
注意 :AnimBP 的状态机搭建、节点连线等操作 必须手动完成,MCP 无法自动连线。AI 可以创建资产和设置变量,但状态机逻辑需要你在编辑器中手动搭建。

验证
  • Content Browser 中 Content/Animations/ABP_XiYouCharacter 资产存在
  • 双击打开,Event Graph 中有速度更新逻辑
  • AnimGraph 中有 Locomotion 状态机
  • 状态机包含 IdleWalkRun 三个状态
  • 每个状态有对应的 Play Anim Sequence 节点
  • 转换规则正确配置

3.6 创建 BP_XiYouPlayerCharacter(玩家角色蓝图)

资产路径Content/Blueprints/BP_XiYouPlayerCharacter

资产类型Blueprint(基于 AXiYouPlayerCharacter

手动创建步骤
  1. 在 Content Browser 中,右键空白处
  2. 选择 Blueprint Class
  3. 在 "Pick Parent Class" 窗口中,搜索 XiYouPlayerCharacter
  4. 选择 AXiYouPlayerCharacter 作为父类
  5. 命名为 BP_XiYouPlayerCharacter
  6. 双击打开蓝图编辑器

配置组件:

组件 配置项
Mesh (SkeletalMesh) Skeletal Mesh Asset UE5 Mannequin(SKM_Mannequin
Mesh (SkeletalMesh) Anim Class ABP_XiYouCharacter
Mesh (SkeletalMesh) 位置/旋转 调整使模型面向正确方向
CapsuleComponent Capsule Half Height 90(默认)
CapsuleComponent Capsule Radius 34(默认)

具体操作:

  1. 配置 Mesh

    • 在 Components 面板选择 Mesh
    • 在 Details 面板找到 Skeletal Mesh 属性
    • 从 Content Browser 拖入 SKM_Mannequin(或你使用的骨骼网格体)
    • 找到 Anim Class 属性
    • 从下拉菜单选择 ABP_XiYouCharacter
  2. 调整 Mesh 位置

    • 选择 Mesh 组件
    • 调整 Location(0, 0, -90)(使脚底对齐 Capsule 底部)
    • 调整 Rotation(0, -90, 0)(使模型面向 +X 方向)
    • 具体值取决于骨骼朝向,确保角色面朝 +X

配置类默认值:

属性 配置项
AnimClass 动画蓝图类 ABP_XiYouCharacter(已通过 Mesh Anim Class 设置)

注意InputConfig 属性在 PlayerController 上设置,不在角色蓝图上。角色蓝图主要配置 Mesh 和 AnimClass。

  1. 保存资产(Ctrl+S
通过 MCP 让 AI 创建

"请创建一个 Blueprint 资产,路径为 /Game/Blueprints/BP_XiYouPlayerCharacter,父类为 AXiYouPlayerCharacter。然后设置 Mesh 组件的 Skeletal Mesh 为 SKM_Mannequin,Anim Class 为 ABP_XiYouCharacter。"

验证
  • Content Browser 中 Content/Blueprints/BP_XiYouPlayerCharacter 资产存在
  • 双击打开,Mesh 组件有 Skeletal Mesh 和 Anim Class
  • 视口中角色模型正确显示,面向 +X 方向

3.7 配置 PlayerController 的 InputConfig

操作目标 :在 PlayerController 的蓝图或编辑器中设置 InputConfig 引用。

方法 A:通过 GameMode 蓝图(推荐)

如果 GameMode 使用蓝图配置:

  1. 创建或打开 GameMode 蓝图(如 BP_XiYouGameMode
  2. 在 Details 面板找到 Input Config 属性
  3. 从 Content Browser 拖入 DA_XiYouInputConfig
方法 B:通过 C++ 代码设置

XiYouPlayerController.cpp 的构造函数中添加:

cpp 复制代码
// 构造函数中加载 InputConfig 资产
static ConstructorHelpers::FObjectFinder<UXiYouInputConfig> InputConfigFinder(
    TEXT("/Game/Input/DA_XiYouInputConfig.DA_XiYouInputConfig"));
if (InputConfigFinder.Succeeded())
{
    InputConfig = InputConfigFinder.Object;
}

注意ConstructorHelpers 只在构造函数中使用。如果资产路径变更,需同步修改代码。

方法 C:通过编辑器实例设置
  1. 在 World Settings 中找到 GameMode Override
  2. 展开 PlayerController Class 的默认值
  3. 设置 Input ConfigDA_XiYouInputConfig
验证
  • 运行 PIE,控制台无 InputConfig is null 警告
  • 按 WASD 角色能移动
  • 左键点击地面角色能寻路

四、MCP 工具使用指南

4.1 MCP 能做什么 / 不能做什么

操作 MCP 可自动完成 说明
创建资产 创建 InputAction、IMC、DataAsset、Blueprint 等
设置资产属性 设置 Value Type、引用其他资产等
编译蓝图 触发蓝图编译
Live Coding 触发 C++ Live Coding 重新编译
拖拽连线 蓝图节点连线必须手动
状态机搭建 AnimBP 状态机必须手动搭建
IMC 键位映射 ⚠️ 部分 可创建 IMC,但键位映射配置可能需要手动

4.2 常用 MCP 指令示例

以下是你可以对 AI 说的指令示例:

创建资产
复制代码
请创建以下资产:
1. InputAction: /Game/Input/IA_Move (Value Type: Axis2D)
2. InputAction: /Game/Input/IA_ClickMove (Value Type: Digital)
3. InputMappingContext: /Game/Input/IMC_PC
4. DataAsset: /Game/Input/DA_XiYouInputConfig (基于 UXiYouInputConfig)
设置属性
复制代码
请设置 DA_XiYouInputConfig 的 NativeInputActions 数组:
- 第0个元素: InputAction = IA_Move, InputTag = InputTag.Move
- 第1个元素: InputAction = IA_ClickMove, InputTag = InputTag.ClickMove
创建蓝图
复制代码
请创建 Blueprint: /Game/Blueprints/BP_XiYouPlayerCharacter
父类: AXiYouPlayerCharacter
设置 Mesh 组件的 Anim Class 为 ABP_XiYouCharacter
编译
复制代码
请触发 Live Coding 重新编译 C++ 代码。

请编译蓝图 BP_XiYouPlayerCharacter。

4.3 MCP 协作工作流

推荐的 AI 协作流程:

  1. AI 创建资产:让 AI 通过 MCP 创建所有可自动创建的资产
  2. 手动配置:你手动完成 MCP 无法完成的操作(IMC 键位映射、AnimBP 状态机连线)
  3. AI 验证:让 AI 通过 MCP 检查资产是否存在、属性是否正确
  4. AI 编译:让 AI 触发编译
  5. 你测试:运行 PIE 验证功能

五、验证清单

5.1 逐资产验证

IA_Move 验证
# 验证项 预期结果
1 资产存在于 Content/Input/IA_Move
2 Value Type = Axis2D (Vector2D)
IA_ClickMove 验证
# 验证项 预期结果
1 资产存在于 Content/Input/IA_ClickMove
2 Value Type = Digital (bool)
IMC_PC 验证
# 验证项 预期结果
1 资产存在于 Content/Input/IMC_PC
2 Mappings 包含 5 个条目
3 IA_Move → W(无 Modifier)
4 IA_Move → S(Negate Modifier)
5 IA_Move → A(Negate Modifier)
6 IA_Move → D(无 Modifier)
7 IA_ClickMove → LeftMouseButton
DA_XiYouInputConfig 验证
# 验证项 预期结果
1 资产存在于 Content/Input/DA_XiYouInputConfig
2 NativeInputActions 包含 2 个条目
3 条目0: InputAction=IA_Move, InputTag=InputTag.Move
4 条目1: InputAction=IA_ClickMove, InputTag=InputTag.ClickMove
5 AbilityInputActions 为空
ABP_XiYouCharacter 验证
# 验证项 预期结果
1 资产存在于 Content/Animations/ABP_XiYouCharacter
2 Event Graph 有速度更新逻辑
3 AnimGraph 有 Locomotion 状态机
4 状态机包含 Idle/Walk/Run 三个状态
5 每个状态有 Play Anim Sequence 节点
6 转换规则正确
BP_XiYouPlayerCharacter 验证
# 验证项 预期结果
1 资产存在于 Content/Blueprints/BP_XiYouPlayerCharacter
2 父类为 AXiYouPlayerCharacter
3 Mesh 组件有 Skeletal Mesh
4 Mesh 组件 Anim Class = ABP_XiYouCharacter
5 模型面向 +X 方向

5.2 整体集成验证

# 验证项 操作方法 预期结果
1 角色生成 PIE 启动 场景中生成角色,摄像机跟随
2 WASD 移动 按 W/A/S/D 角色向世界坐标对应方向移动
3 角色朝向 移动时观察 角色自动面向移动方向
4 左键点击移动 左键点击地面 角色寻路到目标点
5 不可达处理 点击墙壁/NavMesh 外 角色不移动,无报错
6 移动中改向 移动中再次点击 角色改变目标点
7 WASD 取消寻路 点击移动后按 WASD 取消寻路,切换手动移动
8 动画-Idle 角色静止 播放 Idle 动画
9 动画-Walk 角色慢走 播放 Walk 动画
10 动画-Run 角色快跑 播放 Run 动画
11 摄像机缩放 鼠标滚轮 摄像机缩放正常(T02 功能)

5.3 DS 多人验证(可选)

# 验证项 操作方法 预期结果
1 启动 DS 运行 Dedicated Server 服务器正常启动
2 客户端连接 2 个客户端连接 角色正常生成
3 移动同步 客户端1 移动 客户端2 看到角色移动
4 点击移动同步 客户端1 点击移动 客户端2 看到角色寻路
5 无严重抖动 观察模拟代理 移动平滑,无明显抖动

六、常见问题与解决方案

Q1: GameplayTag 下拉菜单中看不到 InputTag.Move

原因:C++ 代码未编译或编辑器未刷新。

解决方案

  1. 确认 C++ 代码已成功编译(XiYouGameplayTags.cpp 中使用 UE_DEFINE_GAMEPLAY_TAG_COMMENT 定义了 Tag)
  2. 重启 UE 编辑器
  3. 或在控制台输入 GameplayTags.RefreshTags 刷新标签

说明 :InputTag.Move 和 InputTag.ClickMove 已通过 C++ 原生定义(UE_DECLARE_GAMEPLAY_TAG_EXTERN + UE_DEFINE_GAMEPLAY_TAG_COMMENT),无需在 DefaultGameplayTags.ini 中手动注册。INI 文件仅用于补充 GameplayCue 等不需要 C++ 直接引用的辅助 Tag。

Q2: 按 WASD 角色不移动

排查步骤

  1. 检查 IMC_PC 是否正确配置了键位映射
  2. 检查 DA_XiYouInputConfig 中 NativeInputActions 是否正确
  3. 检查 PlayerController 的 InputConfig 是否已设置
  4. 检查 SetupInputComponent()BindNativeAction 是否成功
  5. 控制台输入 showdebug input 查看输入状态

Q3: 左键点击角色不移动

排查步骤

  1. 确认地图中有 NavMeshBoundsVolume 且覆盖可行走区域
  2. P 键查看 NavMesh(绿色区域为可行走)
  3. 检查点击位置是否在 NavMesh 范围内
  4. 检查 HandleClickMove() 中的 NavMesh 可达性检查是否通过

Q4: 动画不切换

排查步骤

  1. 检查 ABP_XiYouCharacter 的 Event Graph 中速度更新逻辑
  2. 确认 Speed 变量值在移动时变化(使用 Print String 调试)
  3. 检查状态机转换条件是否正确
  4. 确认 BP_XiYouPlayerCharacter 的 Mesh Anim Class 已设置

Q5: MCP 命令无响应

排查步骤

  1. 确认控制台已执行 ModelContextProtocol.StartServer
  2. 确认 AI Agent 已连接到 MCP Server
  3. 检查 UE 编辑器输出日志是否有 MCP 相关错误
  4. 尝试重启 MCP Server

Q6: 编译后蓝图找不到 C++ 类

原因:Live Coding 未完全刷新类信息。

解决方案

  1. 关闭 UE 编辑器
  2. 在 VS2022 中重新生成解决方案
  3. 重新打开 UE 编辑器
  4. 确认 C++ 类在蓝图 Pick Class 窗口中可见

七、资产路径速查表

资产名 路径 类型 父类/基类
IA_Move /Game/Input/IA_Move InputAction ---
IA_ClickMove /Game/Input/IA_ClickMove InputAction ---
IMC_PC /Game/Input/IMC_PC InputMappingContext ---
DA_XiYouInputConfig /Game/Input/DA_XiYouInputConfig DataAsset UXiYouInputConfig
ABP_XiYouCharacter /Game/Animations/ABP_XiYouCharacter AnimBlueprint UAnimInstance
BP_XiYouPlayerCharacter /Game/Blueprints/BP_XiYouPlayerCharacter Blueprint AXiYouPlayerCharacter

八、AI 协作示例对话

以下是你与 AI 协作创建蓝图资产的示例对话流程:

第一轮:创建 InputAction 资产

:请帮我在 UE 编辑器中创建两个 InputAction 资产:

  1. /Game/Input/IA_Move,Value Type 设为 Axis2D (Vector2D)
  2. /Game/Input/IA_ClickMove,Value Type 设为 Digital (bool)

AI:好的,我通过 MCP 工具为你创建这两个资产...(执行 MCP 工具调用)...两个 InputAction 资产已创建完成。

第二轮:创建 IMC_PC

:请创建 InputMappingContext 资产 /Game/Input/IMC_PC

AI:IMC_PC 资产已创建。但键位映射需要你手动配置,请按以下步骤操作:

  1. 双击打开 IMC_PC
  2. 添加 5 个映射条目...
    (给出详细步骤)

第三轮:创建 DataAsset

:请创建 DataAsset /Game/Input/DA_XiYouInputConfig,基于 UXiYouInputConfig 类。然后配置 NativeInputActions。

AI:DA_XiYouInputConfig 已创建。NativeInputActions 已配置为两个条目...(执行 MCP 工具)...请验证配置是否正确。

第四轮:创建 AnimBP

:请创建 AnimBlueprint /Game/Animations/ABP_XiYouCharacter

AI:ABP_XiYouCharacter 资产已创建。但状态机搭建需要你手动完成,请参考蓝图操作指南 §3.5 的步骤...

第五轮:创建角色蓝图

:请创建 Blueprint /Game/Blueprints/BP_XiYouPlayerCharacter,父类为 AXiYouPlayerCharacter。

AI:BP_XiYouPlayerCharacter 已创建。Mesh 和 Anim Class 已设置...请验证角色是否正确显示。

第六轮:编译验证

:请触发 Live Coding 重新编译,然后帮我验证所有资产。

AI:Live Coding 已触发,编译成功。我通过 MCP 检查了所有资产...验证结果如下...全部通过。

相关推荐
小保CPP5 小时前
OCR C++ Tesseract从OpenCV中获取图片
c++·人工智能·opencv·ocr·模式识别·光学字符识别
CHANG_THE_WORLD6 小时前
7.C++标准多线程实现 TCP通信
java·c++·tcp/ip
●VON6 小时前
鸿蒙 PC Markdown 编辑器导出架构:安全 HTML 与系统 PDF
华为·架构·编辑器·harmonyos·鸿蒙
江屿风6 小时前
【C++笔记】List流食般投喂
开发语言·c++·笔记·list
Lucis__9 小时前
基于Cache替换算法的LRU缓存实现
数据结构·c++·算法·缓存·lru
软件工程师文艺9 小时前
TigerVNC 源码架构深度解析:从协议状态机到拥塞控制的设计哲学
架构
Cx330❀15 小时前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
c2385615 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
辞旧 lekkk16 小时前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap