003 XiYou 西游 — P0 阶段实施计划

XiYou 西游 --- P0 阶段实施计划

版本 : v1.0

日期 : 2026-07-15

阶段 : P0 --- 可运行的俯视角实时战斗原型 + 技能系统

引擎: UE5.7


1. P0 阶段目标与验收标准

1.1 阶段目标

构建一个可运行的俯视角实时战斗原型,验证核心玩法循环:

  • 角色能在俯视角场景中移动
  • 角色能释放 5 个技能
  • 技能有 CD 和蓝耗
  • 技能能对怪物造成伤害
  • 怪物能被击杀
  • 基础 Buff/Debuff 能生效

1.2 验收标准

# 验收项 通过条件
1 角色移动 玩家角色能通过点击/摇杆/WASD 在场景中移动,位置在 DS 上正确同步
2 俯视角摄像机 摄像机固定等距俯视角,可缩放,不可旋转
3 5 技能槽 角色拥有 5 个技能槽,能从已学技能中自由装配
4 技能释放 点击技能按钮/快捷键能释放技能,有施法动画和特效
5 技能 CD 释放后进入 CD,CD 期间按钮变灰不可再次释放
6 技能蓝耗 释放消耗蓝量,蓝量不足时无法释放并提示
7 伤害计算 技能命中怪物后按公式计算伤害,显示伤害飘字
8 怪物 AI 怪物能巡逻、追击、攻击玩家
9 怪物击杀 怪物 HP 归零后死亡,可重生
10 Buff/Debuff 技能能施加 Buff/Debuff,效果正确生效和到期移除
11 控制效果 眩晕/沉默等控制效果能正确限制角色行动
12 手机端输入 手机端虚拟摇杆 + 技能按钮能正常操作
13 网络同步 DS 模式下所有功能正常,无严重同步问题

1.3 P0 不包含

  • 角色创建/选择界面(使用默认角色)
  • 装备系统(仅预留接口)
  • 背包系统(仅预留接口)
  • 技能书掉落/学习(使用 GM 命令直接学习)
  • 数据持久化(仅内存状态)
  • UI 美化(使用占位 UI)
  • 怪物掉落
  • NPC 对话
  • 地图切换

2. 任务分解

2.1 任务总览

任务ID 任务名称 复杂度 前置依赖 产出物
T01 UE5 项目基础搭建 中等 Module结构、基础类、Build.cs
T02 俯视角摄像机系统 简单 T01 摄像机Actor、缩放逻辑
T03 角色基类与移动系统 中等 T01 Character基类、移动逻辑、Replication
T04 GAS 集成基础 复杂 T03 ASC、AttributeSet、基础Ability
T05 属性系统与伤害计算 中等 T04 完整属性集、MMC、伤害Execution
T06 技能槽系统 中等 T04 5槽位装配逻辑、UI
T07 技能释放与战斗逻辑 复杂 T05, T06 技能释放流程、AbilityTask
T08 Buff/Debuff 系统 中等 T05 GameplayEffect体系、控制效果
T09 怪物 AI 与战斗 中等 T07 AIController、行为树、仇恨系统
T10 手机端输入适配 中等 T03, T06 EnhancedInput、虚拟摇杆、技能按钮
T11 战斗 UI 与反馈 中等 T07, T08 血条、蓝条、CD、飘字、Buff图标
T12 集成测试与调优 中等 T09, T10, T11 完整战斗原型、性能调优

2.2 任务详细说明

T01: UE5 项目基础搭建

复杂度 : 中等

目标: 搭建项目的 C++ Module 结构和基础框架类

子任务:

# 子任务 说明
1 更新 Build.cs 添加 GAS、EnhancedInput、UMG、AIModule 等依赖
2 创建 XiYouGameInstance 游戏实例类,管理全局状态
3 创建 XiYouGameMode 游戏模式类,定义默认类和规则
4 创建 XiYouGameState 游戏状态类,全局复制状态
5 创建 XiYouPlayerController 玩家控制器类,输入处理和 RPC
6 创建 XiYouPlayerState 玩家状态类,挂载 ASC
7 创建 XiYouHUD HUD 类,管理 UI
8 创建目录结构 Core/Character/Ability/Attribute/Combat/AI/UI/Data 等目录
9 配置 DefaultEngine.ini 网络参数、GameMode、GameInstance 配置
10 配置 DefaultGame.ini 游戏相关配置

产出文件:

  • Source/XiYou/XiYou.Build.cs(更新)
  • Source/XiYou/Core/XiYouGameInstance.h/.cpp
  • Source/XiYou/Core/XiYouGameMode.h/.cpp
  • Source/XiYou/Core/XiYouGameState.h/.cpp
  • Source/XiYou/Core/XiYouPlayerController.h/.cpp
  • Source/XiYou/Core/XiYouPlayerState.h/.cpp
  • Source/XiYou/Core/XiYouHUD.h/.cpp
  • Config/DefaultEngine.ini(更新)
  • Config/DefaultGame.ini(更新)

T02: 俯视角摄像机系统

复杂度 : 简单

目标: 实现等距俯视角摄像机,固定角度可缩放不可旋转

子任务:

# 子任务 说明
1 创建 AXiYouCameraActor 摄像机 Actor,固定俯视角
2 摄像机跟随 跟随玩家角色移动,平滑插值
3 摄像机缩放 鼠标滚轮/双指缩放,限制缩放范围
4 摄像机参数配置 角度、距离、缩放范围可配置
5 摄像机边界限制 限制摄像机不超出地图边界

产出文件:

  • Source/XiYou/Core/XiYouCameraActor.h/.cpp

关键设计:

  • 摄像机角度:约 45-60 度俯视角
  • 摄像机距离:800-2000 单位可调
  • 使用 SpringArm + Camera 组件
  • 在 PlayerController 中设置 ViewTarget

T03: 角色基类与移动系统

复杂度 : 中等

目标: 实现角色基类和移动系统,支持 DS Replication

子任务:

# 子任务 说明
1 创建 AXiYouCharacter 角色基类,定义核心属性和组件
2 创建 AXiYouPlayerCharacter 玩家角色,输入处理
3 移动组件配置 CharacterMovementComponent 配置(俯视角移动)
4 点击移动 PC 端右键点击地面移动(NavMesh 寻路)
5 移动 Replication 移动同步,客户端预测
6 角色朝向 移动时自动面向移动方向
7 基础动画 Idle/Run/Death 基础动画(可用占位动画)
8 角色血条组件 头顶血条 WidgetComponent

产出文件:

  • Source/XiYou/Character/XiYouCharacter.h/.cpp
  • Source/XiYou/Character/XiYouPlayerCharacter.h/.cpp

关键设计:

  • 使用 UE5 内置 CharacterMovementComponent
  • 俯视角移动:bOrientRotationToMovement = true,bUseControllerRotationYaw = false
  • 点击移动:ServerMoveToTarget RPC + UNavigationSystemV1::FindPathToLocationSynchronously
  • 移动同步:UE5 内置客户端预测 + 服务端校正

T04: GAS 集成基础

复杂度 : 复杂

目标: 集成 GAS 系统,实现 ASC、AttributeSet、基础 Ability

子任务:

# 子任务 说明
1 创建 UXiYouAbilitySystemComponent ASC 扩展,技能槽管理
2 创建 UXiYouAttributeSet 基础属性集(HP/MP/ATK/SPD 等)
3 ASC 初始化流程 在 PlayerState 中初始化 ASC,设置 AvatarActor
4 创建 UXiYouAbility 基类 技能基类,定义核心属性和虚函数
5 创建基础伤害技能 UXiYouDamageAbility,验证技能释放流程
6 创建 CD GameplayEffect 技能冷却 Effect
7 创建蓝耗 GameplayEffect 技能蓝耗 Effect
8 GameplayTag 初始化 创建 XiYou Tag 目录结构
9 技能数据表 XiYouSkillData DataTable,配置技能参数
10 GAS Replication 验证 验证 ASC/Ability/Effect 的网络复制

产出文件:

  • Source/XiYou/Ability/XiYouAbilitySystemComponent.h/.cpp
  • Source/XiYou/Attribute/XiYouAttributeSet.h/.cpp
  • Source/XiYou/Ability/XiYouAbility.h/.cpp
  • Source/XiYou/Ability/XiYouDamageAbility.h/.cpp
  • Source/XiYou/Data/Tables/ (DataTable 资源)
  • Content/GameplayTags/ (Tag 定义资源)

关键设计:

  • ASC 挂载在 PlayerState 上
  • AttributeSet 包含 HP/MaxHP/MP/MaxMP/ATK/SPD 等核心属性
  • 技能数据通过 DataTable 配置,运行时加载
  • CD 和蓝耗通过 GameplayEffect 实现

技术风险: GAS 学习曲线陡峭,需要大量阅读源码和示例


T05: 属性系统与伤害计算

复杂度 : 中等

目标: 实现完整的属性体系和伤害计算公式

子任务:

# 子任务 说明
1 扩展 AttributeSet 添加根骨/灵性/力量/敏捷等基础属性
2 创建 MMC 衍生属性 ModifierMagnitudeCalculation 计算衍生属性
3 创建 UXiYouAttributeCalculator 属性计算器,管理属性初始化和更新
4 创建 UXiYouDamageExecution 伤害执行类,实现伤害公式
5 物理伤害公式 ATK × 倍率 → 防御减免 → 破防 → 暴击 → 波动
6 法术伤害公式 法术ATK × 倍率 → 抗性减免 → 忽视 → 狂暴 → 五行 → 波动
7 治疗量公式 法术ATK × 倍率 → 治疗加成 → 波动
8 属性初始化 根据种族和等级初始化属性
9 伤害日志 服务端记录伤害计算过程(调试用)

产出文件:

  • Source/XiYou/Attribute/XiYouAttributeSet.h/.cpp(扩展)
  • Source/XiYou/Attribute/XiYouAttributeCalculator.h/.cpp
  • Source/XiYou/Combat/XiYouDamageExecution.h/.cpp
  • Source/XiYou/Combat/XiYouCombatLog.h/.cpp

关键设计:

  • 基础属性通过 AttributeSet 的 FGameplayAttributeData 定义
  • 衍生属性通过 MMC(ModifierMagnitudeCalculation)计算
  • 伤害公式在 GameplayEffectExecution 中实现
  • 所有伤害计算在服务端执行

T06: 技能槽系统

复杂度 : 中等

目标: 实现 5 技能槽自由装配系统

子任务:

# 子任务 说明
1 技能槽数据结构 EquippedAbilitySlots 数组,5 个槽位
2 技能装配逻辑 ServerEquipAbility/ServerUnequipAbility RPC
3 技能槽 Replication EquippedAbilitySlots 复制和 RepNotify
4 技能槽 UI 5 个技能按钮,显示技能图标和 CD
5 技能装配 UI 简单的已学技能列表 + 拖拽到槽位
6 GM 命令学习技能 供测试用的 GM 命令直接学习技能
7 技能槽与 InputID 映射 槽位索引 → InputID → GAS Ability 激活

产出文件:

  • Source/XiYou/Ability/XiYouAbilitySystemComponent.h/.cpp(扩展)
  • Source/XiYou/UI/Widgets/W_SkillBar.h/.cpp
  • Source/XiYou/UI/Widgets/W_SkillSlot.h/.cpp
  • Source/XiYou/UI/Widgets/W_SkillList.h/.cpp

关键设计:

  • 5 个槽位对应 InputID 1-5
  • 装配 = 将 AbilitySpec 的 InputID 设为对应槽位
  • 换装 = 解绑旧 InputID + 绑定新 InputID
  • UI 使用 UMG 实现,支持拖拽

T07: 技能释放与战斗逻辑

复杂度 : 复杂

目标: 实现完整的技能释放流程和多种技能形态

子任务:

# 子任务 说明
1 技能释放流程 客户端请求 → 服务端验证 → CommitAbility → 执行效果
2 单体伤害技能 UXiYouSingleTargetAbility,选择目标释放
3 方向性技能 UXiYouDirectionalAbility,朝面向方向释放
4 AOE 技能 UXiYouAOEAbility,以目标点为中心范围伤害
5 弹道型技能 UXiYouProjectileAbility,发射弹道命中伤害
6 治疗技能 UXiYouHealAbility,治疗目标
7 AbilityTask 自定义 Task:播放蒙太奇、生成弹道、区域伤害
8 目标选择系统 自动锁定最近 + 手动点击 + Tab 切换
9 技能范围指示器 选中技能时显示范围/方向指示
10 施法前摇 部分技能有前摇,前摇期间可被打断
11 技能打断 控制效果打断正在施法的技能

产出文件:

  • Source/XiYou/Ability/XiYouDamageAbility.h/.cpp(扩展)
  • Source/XiYou/Ability/XiYouHealAbility.h/.cpp
  • Source/XiYou/Ability/XiYouSingleTargetAbility.h/.cpp
  • Source/XiYou/Ability/XiYouDirectionalAbility.h/.cpp
  • Source/XiYou/Ability/XiYouAOEAbility.h/.cpp
  • Source/XiYou/Ability/XiYouProjectileAbility.h/.cpp
  • Source/XiYou/Ability/XiYouAbilityTask_PlayMontageAndWait.h/.cpp
  • Source/XiYou/Ability/XiYouAbilityTask_SpawnProjectile.h/.cpp
  • Source/XiYou/Ability/XiYouAbilityTask_ApplyAreaDamage.h/.cpp
  • Source/XiYou/Ability/XiYouTargetType.h/.cpp

关键设计:

  • 每种技能形态一个子类,重写 ActivateAbility
  • 弹道型技能使用 AbilityTask_SpawnProjectile 生成弹道 Actor
  • AOE 技能使用 AbilityTask_ApplyAreaDamage 在服务端检测范围内目标
  • 目标选择在 PlayerController 中处理

T08: Buff/Debuff 系统

复杂度 : 中等

目标: 实现 Buff/Debuff 的施加、叠加、驱散、到期移除

子任务:

# 子任务 说明
1 Buff GameplayEffect 体系 定义各种 Buff/Debuff 的 GameplayEffect 类
2 Buff 叠加规则 AggregateBySource/AggregateByTarget/Override
3 控制效果实现 眩晕/沉默/定身/恐惧的 GameplayEffect + Tag
4 控制效果逻辑 眩晕禁止移动和施法,沉默禁止施法,定身禁止移动
5 DoT 效果 毒/燃烧等持续伤害,Period 执行
6 Buff 驱散 驱散技能移除可驱散 Buff
7 Buff 图标 UI 显示当前 Buff/Debuff 图标和剩余时间
8 Buff 到期处理 持续时间结束自动移除,角色死亡清除所有 Buff

产出文件:

  • Source/XiYou/Buff/XiYouGameplayEffect.h/.cpp
  • Source/XiYou/Buff/XiYouBuffManager.h/.cpp
  • Source/XiYou/Ability/XiYouBuffAbility.h/.cpp
  • Source/XiYou/Ability/XiYouControlAbility.h/.cpp
  • Source/XiYou/UI/Widgets/W_BuffBar.h/.cpp
  • Content/GameplayEffects/ (GE 蓝图资源)

关键设计:

  • 每个 Buff 对应一个 UGameplayEffect 派生类或蓝图
  • 控制效果通过 GameplayTag 实现:State.Stun / State.Silence / State.Root
  • 技能释放前检查 Tag:有 State.Stun 则无法释放任何技能
  • 移动前检查 Tag:有 State.Stun 或 State.Root 则无法移动
  • DoT 通过 GameplayEffect 的 Period + Execution 实现

T09: 怪物 AI 与战斗

复杂度 : 中等

目标: 实现怪物 AI,能巡逻、追击、攻击玩家

子任务:

# 子任务 说明
1 创建 AXiYouAICharacter AI 角色基类,挂载 ASC
2 创建 AXiYouMonster 怪物类,定义怪物属性和技能
3 创建 AXiYouAIController AI 控制器,管理行为树
4 行为树 - 巡逻 怪物在出生点附近巡逻
5 行为树 - 追击 发现玩家后追击
6 行为树 - 攻击 进入攻击范围后使用技能攻击
7 仇恨系统 记录仇恨列表,攻击仇恨最高的目标
8 怪物死亡与重生 HP 归零死亡,定时重生
9 怪物数据表 XiYouMonsterData DataTable,配置怪物参数
10 怪物生成管理 简单的生成点配置和生成逻辑

产出文件:

  • Source/XiYou/Character/XiYouAICharacter.h/.cpp
  • Source/XiYou/Character/XiYouMonster.h/.cpp
  • Source/XiYou/AI/XiYouAIController.h/.cpp
  • Source/XiYou/AI/BehaviorTrees/ (行为树资源)
  • Source/XiYou/Data/Tables/ (怪物 DataTable)
  • Source/XiYou/World/XiYouSpawnManager.h/.cpp

关键设计:

  • 怪物也使用 GAS 系统,拥有自己的 ASC 和 AttributeSet
  • 怪物技能通过 AI Controller 调用 ASC->TryActivateAbilityByClass 释放
  • 仇恨系统使用 TArray<TPair<AActor*, float>> 按仇恨值排序
  • 怪物死亡后隐藏 Actor,定时后重新显示并恢复属性

T10: 手机端输入适配

复杂度 : 中等

目标: 实现手机端虚拟摇杆和技能按钮输入

子任务:

# 子任务 说明
1 EnhancedInput 配置 定义 InputAction 和 InputMappingContext
2 IMC_Mobile 手机端映射:触摸摇杆 + 技能按钮触摸
3 IMC_PC PC 端映射:WASD + QWERF + 鼠标
4 虚拟摇杆 Widget UMG 虚拟摇杆,输出 2D 方向向量
5 技能按钮 Widget 5 个技能按钮,支持触摸和长按
6 平台检测与切换 运行时检测平台,切换 IMC 和 UI 布局
7 触摸目标选择 点击敌人锁定目标

产出文件:

  • Source/XiYou/Core/XiYouInputConfig.h/.cpp
  • Source/XiYou/UI/Widgets/W_VirtualJoystick.h/.cpp
  • Source/XiYou/UI/Widgets/W_SkillButton.h/.cpp
  • Content/Input/ (IA 和 IMC 资源)

关键设计:

  • 使用 UE5 EnhancedInput 系统
  • InputAction 定义:IA_Move, IA_Skill1~5, IA_TargetSelect
  • 虚拟摇杆使用 UMG 实现,OnTouch 事件驱动
  • 技能按钮支持:点击释放、长按显示范围、滑动选方向
  • 平台检测:UPlatformMisc::IsRunningOnMobilePlatform()

T11: 战斗 UI 与反馈

复杂度 : 中等

目标: 实现战斗相关的 UI 和视觉反馈

子任务:

# 子任务 说明
1 血条蓝条 UI 自身血蓝条 + 头顶血条
2 技能栏 UI 5 技能槽 + CD 转圈 + 蓝量不足变灰
3 伤害飘字 伤害/治疗/暴击数值飘字
4 Buff 图标栏 当前 Buff/Debuff 图标和倒计时
5 目标指示器 选中目标的视觉指示
6 技能特效 基础技能特效(可用 Niagara 简化特效)
7 死亡/复活 UI 死亡界面和复活按钮
8 战斗信息日志 简单的战斗信息显示

产出文件:

  • Source/XiYou/UI/Widgets/W_HealthBar.h/.cpp
  • Source/XiYou/UI/Widgets/W_SkillBar.h/.cpp(扩展)
  • Source/XiYou/UI/Widgets/W_DamageNumber.h/.cpp
  • Source/XiYou/UI/Widgets/W_BuffBar.h/.cpp(扩展)
  • Source/XiYou/UI/Widgets/W_TargetIndicator.h/.cpp
  • Source/XiYou/UI/Widgets/W_DeathScreen.h/.cpp

关键设计:

  • 伤害飘字使用 WidgetComponent 或 Niagara 实现
  • CD 转圈使用 UMG 的 RenderAngle 动画
  • 头顶血条使用 WidgetComponent,仅显示附近角色的
  • 技能特效优先使用 Niagara,控制粒子数

T12: 集成测试与调优

复杂度 : 中等

目标: 集成所有系统,进行测试和性能调优

子任务:

# 子任务 说明
1 集成测试场景 创建测试地图,放置怪物和生成点
2 多技能测试 配置 5+ 不同类型技能进行测试
3 网络测试 DS 模式下多人测试,验证同步
4 手机端测试 打包到手机测试操作和性能
5 性能 Profile CPU/GPU/内存/网络性能分析
6 战斗手感调优 技能 CD/蓝耗/伤害数值调优
7 Bug 修复 修复集成测试中发现的问题
8 录制演示视频 录制 P0 原型演示视频

产出物:

  • 可运行的 P0 战斗原型
  • 性能分析报告
  • Bug 列表和修复记录

3. 开发顺序与依赖关系

3.1 依赖图

#mermaid-svg-d7QJxjj3i0frTNMJ{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-d7QJxjj3i0frTNMJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-d7QJxjj3i0frTNMJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-d7QJxjj3i0frTNMJ .error-icon{fill:#552222;}#mermaid-svg-d7QJxjj3i0frTNMJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-d7QJxjj3i0frTNMJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-d7QJxjj3i0frTNMJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-d7QJxjj3i0frTNMJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-d7QJxjj3i0frTNMJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-d7QJxjj3i0frTNMJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-d7QJxjj3i0frTNMJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-d7QJxjj3i0frTNMJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-d7QJxjj3i0frTNMJ .marker.cross{stroke:#333333;}#mermaid-svg-d7QJxjj3i0frTNMJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-d7QJxjj3i0frTNMJ p{margin:0;}#mermaid-svg-d7QJxjj3i0frTNMJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-d7QJxjj3i0frTNMJ .cluster-label text{fill:#333;}#mermaid-svg-d7QJxjj3i0frTNMJ .cluster-label span{color:#333;}#mermaid-svg-d7QJxjj3i0frTNMJ .cluster-label span p{background-color:transparent;}#mermaid-svg-d7QJxjj3i0frTNMJ .label text,#mermaid-svg-d7QJxjj3i0frTNMJ span{fill:#333;color:#333;}#mermaid-svg-d7QJxjj3i0frTNMJ .node rect,#mermaid-svg-d7QJxjj3i0frTNMJ .node circle,#mermaid-svg-d7QJxjj3i0frTNMJ .node ellipse,#mermaid-svg-d7QJxjj3i0frTNMJ .node polygon,#mermaid-svg-d7QJxjj3i0frTNMJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-d7QJxjj3i0frTNMJ .rough-node .label text,#mermaid-svg-d7QJxjj3i0frTNMJ .node .label text,#mermaid-svg-d7QJxjj3i0frTNMJ .image-shape .label,#mermaid-svg-d7QJxjj3i0frTNMJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-d7QJxjj3i0frTNMJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-d7QJxjj3i0frTNMJ .rough-node .label,#mermaid-svg-d7QJxjj3i0frTNMJ .node .label,#mermaid-svg-d7QJxjj3i0frTNMJ .image-shape .label,#mermaid-svg-d7QJxjj3i0frTNMJ .icon-shape .label{text-align:center;}#mermaid-svg-d7QJxjj3i0frTNMJ .node.clickable{cursor:pointer;}#mermaid-svg-d7QJxjj3i0frTNMJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-d7QJxjj3i0frTNMJ .arrowheadPath{fill:#333333;}#mermaid-svg-d7QJxjj3i0frTNMJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-d7QJxjj3i0frTNMJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-d7QJxjj3i0frTNMJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-d7QJxjj3i0frTNMJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-d7QJxjj3i0frTNMJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-d7QJxjj3i0frTNMJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-d7QJxjj3i0frTNMJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-d7QJxjj3i0frTNMJ .cluster text{fill:#333;}#mermaid-svg-d7QJxjj3i0frTNMJ .cluster span{color:#333;}#mermaid-svg-d7QJxjj3i0frTNMJ 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-d7QJxjj3i0frTNMJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-d7QJxjj3i0frTNMJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-d7QJxjj3i0frTNMJ .icon-shape,#mermaid-svg-d7QJxjj3i0frTNMJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-d7QJxjj3i0frTNMJ .icon-shape p,#mermaid-svg-d7QJxjj3i0frTNMJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-d7QJxjj3i0frTNMJ .icon-shape .label rect,#mermaid-svg-d7QJxjj3i0frTNMJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-d7QJxjj3i0frTNMJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-d7QJxjj3i0frTNMJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-d7QJxjj3i0frTNMJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} T01 项目基础搭建
T02 俯视角摄像机
T03 角色基类与移动
T04 GAS集成基础
T05 属性系统与伤害计算
T06 技能槽系统
T07 技能释放与战斗逻辑
T08 Buff/Debuff系统
T09 怪物AI与战斗
T10 手机端输入适配
T11 战斗UI与反馈
T12 集成测试与调优

3.2 开发阶段划分

#mermaid-svg-ooCs6CbaySvGLj7W{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-ooCs6CbaySvGLj7W .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ooCs6CbaySvGLj7W .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ooCs6CbaySvGLj7W .error-icon{fill:#552222;}#mermaid-svg-ooCs6CbaySvGLj7W .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ooCs6CbaySvGLj7W .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ooCs6CbaySvGLj7W .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ooCs6CbaySvGLj7W .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ooCs6CbaySvGLj7W .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ooCs6CbaySvGLj7W .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ooCs6CbaySvGLj7W .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ooCs6CbaySvGLj7W .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ooCs6CbaySvGLj7W .marker.cross{stroke:#333333;}#mermaid-svg-ooCs6CbaySvGLj7W svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ooCs6CbaySvGLj7W p{margin:0;}#mermaid-svg-ooCs6CbaySvGLj7W .mermaid-main-font{font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-ooCs6CbaySvGLj7W .exclude-range{fill:#eeeeee;}#mermaid-svg-ooCs6CbaySvGLj7W .section{stroke:none;opacity:0.2;}#mermaid-svg-ooCs6CbaySvGLj7W .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-ooCs6CbaySvGLj7W .section2{fill:#fff400;}#mermaid-svg-ooCs6CbaySvGLj7W .section1,#mermaid-svg-ooCs6CbaySvGLj7W .section3{fill:white;opacity:0.2;}#mermaid-svg-ooCs6CbaySvGLj7W .sectionTitle0{fill:#333;}#mermaid-svg-ooCs6CbaySvGLj7W .sectionTitle1{fill:#333;}#mermaid-svg-ooCs6CbaySvGLj7W .sectionTitle2{fill:#333;}#mermaid-svg-ooCs6CbaySvGLj7W .sectionTitle3{fill:#333;}#mermaid-svg-ooCs6CbaySvGLj7W .sectionTitle{text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-ooCs6CbaySvGLj7W .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-ooCs6CbaySvGLj7W .grid .tick text{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-ooCs6CbaySvGLj7W .grid path{stroke-width:0;}#mermaid-svg-ooCs6CbaySvGLj7W .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-ooCs6CbaySvGLj7W .task{stroke-width:2;}#mermaid-svg-ooCs6CbaySvGLj7W .taskText{text-anchor:middle;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutsideRight{fill:black;text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-ooCs6CbaySvGLj7W .task.clickable{cursor:pointer;}#mermaid-svg-ooCs6CbaySvGLj7W .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-ooCs6CbaySvGLj7W .taskText0,#mermaid-svg-ooCs6CbaySvGLj7W .taskText1,#mermaid-svg-ooCs6CbaySvGLj7W .taskText2,#mermaid-svg-ooCs6CbaySvGLj7W .taskText3{fill:white;}#mermaid-svg-ooCs6CbaySvGLj7W .task0,#mermaid-svg-ooCs6CbaySvGLj7W .task1,#mermaid-svg-ooCs6CbaySvGLj7W .task2,#mermaid-svg-ooCs6CbaySvGLj7W .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutside0,#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutside2{fill:black;}#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutside1,#mermaid-svg-ooCs6CbaySvGLj7W .taskTextOutside3{fill:black;}#mermaid-svg-ooCs6CbaySvGLj7W .active0,#mermaid-svg-ooCs6CbaySvGLj7W .active1,#mermaid-svg-ooCs6CbaySvGLj7W .active2,#mermaid-svg-ooCs6CbaySvGLj7W .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-ooCs6CbaySvGLj7W .activeText0,#mermaid-svg-ooCs6CbaySvGLj7W .activeText1,#mermaid-svg-ooCs6CbaySvGLj7W .activeText2,#mermaid-svg-ooCs6CbaySvGLj7W .activeText3{fill:black!important;}#mermaid-svg-ooCs6CbaySvGLj7W .done0,#mermaid-svg-ooCs6CbaySvGLj7W .done1,#mermaid-svg-ooCs6CbaySvGLj7W .done2,#mermaid-svg-ooCs6CbaySvGLj7W .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-ooCs6CbaySvGLj7W .doneText0,#mermaid-svg-ooCs6CbaySvGLj7W .doneText1,#mermaid-svg-ooCs6CbaySvGLj7W .doneText2,#mermaid-svg-ooCs6CbaySvGLj7W .doneText3{fill:black!important;}#mermaid-svg-ooCs6CbaySvGLj7W .doneText0.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneText0.taskTextOutsideRight,#mermaid-svg-ooCs6CbaySvGLj7W .doneText1.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneText1.taskTextOutsideRight,#mermaid-svg-ooCs6CbaySvGLj7W .doneText2.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneText2.taskTextOutsideRight,#mermaid-svg-ooCs6CbaySvGLj7W .doneText3.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-ooCs6CbaySvGLj7W .crit0,#mermaid-svg-ooCs6CbaySvGLj7W .crit1,#mermaid-svg-ooCs6CbaySvGLj7W .crit2,#mermaid-svg-ooCs6CbaySvGLj7W .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-ooCs6CbaySvGLj7W .activeCrit0,#mermaid-svg-ooCs6CbaySvGLj7W .activeCrit1,#mermaid-svg-ooCs6CbaySvGLj7W .activeCrit2,#mermaid-svg-ooCs6CbaySvGLj7W .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-ooCs6CbaySvGLj7W .doneCrit0,#mermaid-svg-ooCs6CbaySvGLj7W .doneCrit1,#mermaid-svg-ooCs6CbaySvGLj7W .doneCrit2,#mermaid-svg-ooCs6CbaySvGLj7W .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-ooCs6CbaySvGLj7W .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-ooCs6CbaySvGLj7W .milestoneText{font-style:italic;}#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText0,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText1,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText2,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText3{fill:black!important;}#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText0.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText0.taskTextOutsideRight,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText1.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText1.taskTextOutsideRight,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText2.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText2.taskTextOutsideRight,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText3.taskTextOutsideLeft,#mermaid-svg-ooCs6CbaySvGLj7W .doneCritText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-ooCs6CbaySvGLj7W .vert{stroke:navy;}#mermaid-svg-ooCs6CbaySvGLj7W .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#mermaid-svg-ooCs6CbaySvGLj7W .activeCritText0,#mermaid-svg-ooCs6CbaySvGLj7W .activeCritText1,#mermaid-svg-ooCs6CbaySvGLj7W .activeCritText2,#mermaid-svg-ooCs6CbaySvGLj7W .activeCritText3{fill:black!important;}#mermaid-svg-ooCs6CbaySvGLj7W .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-ooCs6CbaySvGLj7W :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2026-07-19 2026-07-26 2026-08-02 2026-08-09 2026-08-16 2026-08-23 T01 项目基础搭建 T02 俯视角摄像机 T03 角色基类与移动 T04 GAS集成基础 T10 手机端输入适配 T05 属性与伤害计算 T06 技能槽系统 T07 技能释放与战斗 T08 Buff/Debuff T09 怪物AI与战斗 T11 战斗UI与反馈 T12 集成测试与调优 基础搭建GAS核心战斗实现适配与集成 P0 开发阶段

3.3 关键路径

复制代码
T01 → T03 → T04 → T05 → T07 → T09 → T12

关键路径上的任务决定了 P0 的最短完成时间。其中 T04(GAS 集成基础)和 T07(技能释放与战斗逻辑)是最复杂的两个任务,是整个 P0 的核心瓶颈。


4. 每个任务的预估复杂度

任务ID 任务名称 复杂度 风险因素
T01 UE5 项目基础搭建 ⭐⭐ 中等 UE5.7 API 变更
T02 俯视角摄像机系统 ⭐ 简单 无重大风险
T03 角色基类与移动系统 ⭐⭐ 中等 移动同步细节
T04 GAS 集成基础 ⭐⭐⭐ 复杂 GAS 学习曲线、文档不足
T05 属性系统与伤害计算 ⭐⭐ 中等 MMC 理解、公式调试
T06 技能槽系统 ⭐⭐ 中等 GAS InputID 机制理解
T07 技能释放与战斗逻辑 ⭐⭐⭐ 复杂 多种技能形态、AbilityTask
T08 Buff/Debuff 系统 ⭐⭐ 中等 GameplayEffect 叠加规则
T09 怪物 AI 与战斗 ⭐⭐ 中等 AI 与 GAS 集成
T10 手机端输入适配 ⭐⭐ 中等 触摸输入与 GAS 配合
T11 战斗 UI 与反馈 ⭐⭐ 中等 UMG 与 GAS 数据绑定
T12 集成测试与调优 ⭐⭐ 中等 多系统联调

复杂度分布:

  • 简单: 1 个任务(8%)
  • 中等: 9 个任务(75%)
  • 复杂: 2 个任务(17%)

5. 技术风险与应对方案

5.1 GAS 学习曲线

项目 说明
风险等级 🔴 高
风险描述 GAS 系统复杂度高,文档分散,API 设计不直观。独自开发没有团队支持,学习成本大
影响范围 T04、T05、T06、T07、T08 全部依赖 GAS
应对方案 1. 优先学习官方 ARPG 示例项目(ActionRPG / Lyra)的 GAS 实现
2. 从最简单的技能开始,逐步增加复杂度
3. 记录 GAS 学习笔记,建立自己的知识库
4. 遇到问题优先查 GAS 源码,注释比文档更准确
5. 先实现一个最简单的伤害技能跑通全流程,再扩展

5.2 UE5.7 不稳定性

项目 说明
风险等级 🟡 中
风险描述 UE5.7 为最新版本,可能存在未修复的 Bug、API 变更、文档滞后
影响范围 所有任务
应对方案 1. 接受不稳定性,遇到引擎 Bug 及时记录
2. 关注 UE5 GitHub Issues 和论坛
3. 使用 Git 管理项目,每次重大变更前提交
4. 避免使用过于前沿的引擎特性,优先使用成熟 API
5. 准备降级到 UE5.6 的预案

5.3 手机端性能

项目 说明
风险等级 🟡 中
风险描述 俯视角场景同屏角色多,技能特效消耗大,手机端可能无法达到 30FPS
影响范围 T10、T12
应对方案 1. P0 阶段使用简化特效,验证功能而非画质
2. 早期就进行手机端性能测试,建立性能基线
3. 使用 Unreal Insights 进行性能分析
4. 控制同屏角色数量(P0 阶段 10-20 个)
5. 使用 LOD、Instance 渲染、粒子数限制等优化手段

5.4 大规模 Replication 优化

项目 说明
风险等级 🟢 低(P0阶段)
风险描述 500-1000 人在线的 Replication 优化是长期挑战,但 P0 阶段不需要解决
影响范围 P0 阶段影响小,P1/P2 阶段影响大
应对方案 1. P0 阶段先确保 DS 模式下基本功能正常
2. 设计时遵循 Replication 最佳实践,预留优化空间
3. P1 阶段实现 AOI 兴趣区域管理
4. P2 阶段进行大规模压力测试和优化

5.5 独自开发风险

项目 说明
风险等级 🟡 中
风险描述 独自开发没有代码审查,容易陷入设计过度或实现缺陷;长时间开发容易动力不足
影响范围 所有任务
应对方案 1. 严格遵循文档驱动开发,先设计后实现
2. 每个里程碑设置明确的验收标准
3. 定期回顾和重构,保持代码质量
4. 记录开发日志,追踪进度和问题
5. 开发周期不限,避免赶工导致质量下降

6. 里程碑节点

里程碑 1: 基础框架就绪

目标: 项目能运行,角色能移动,摄像机正常

包含任务: T01 + T02 + T03

验收标准:

  • UE5 项目编译运行
  • 俯视角摄像机正常工作
  • 角色能通过点击/摇杆/WASD 移动
  • DS 模式下移动同步正常
  • 角色有基础 Idle/Run 动画

交付物: 可运行的基础场景,角色可移动


里程碑 2: GAS 核心打通

目标: 技能能释放,有 CD 和蓝耗,能造成伤害

包含任务: T04 + T05 + T06

验收标准:

  • ASC 正确初始化和复制
  • AttributeSet 包含核心属性
  • 能通过 GM 命令学习技能
  • 技能能装配到 5 个槽位
  • 技能能释放,有施法动画
  • 技能有 CD,CD 期间不可释放
  • 技能有蓝耗,蓝量不足不可释放
  • 伤害计算公式正确
  • 伤害飘字显示

交付物: 角色能释放技能打木桩(静态目标)


里程碑 3: 战斗闭环

目标: 能打怪,怪物能反击,完整的战斗循环

包含任务: T07 + T08 + T09

验收标准:

  • 多种技能形态正常工作(单体/AOE/弹道/方向)
  • Buff/Debuff 正确施加和移除
  • 控制效果(眩晕/沉默/定身)正确生效
  • 怪物能巡逻、追击、攻击
  • 怪物能被击杀和重生
  • 完整的战斗循环:接近→释放技能→怪物受伤→怪物反击→击杀/死亡

交付物: 完整的战斗原型,能打怪


里程碑 4: P0 完成

目标: 手机端可玩,所有 P0 功能验收通过

包含任务: T10 + T11 + T12

验收标准:

  • 手机端虚拟摇杆和技能按钮正常操作
  • PC 端键鼠操作正常
  • 战斗 UI 完整(血条/蓝条/CD/飘字/Buff图标)
  • DS 模式下所有功能正常
  • 手机端达到 30FPS(中端设备)
  • 无严重 Bug
  • P0 全部 13 项验收标准通过

交付物: 可运行的 P0 战斗原型,手机端可玩


附录 A: P0 阶段技术决策记录

决策 选择 备选 理由
ASC 挂载位置 PlayerState Character 角色重建不丢失技能数据
技能数据来源 DataTable 硬编码/Blueprint 配置驱动,易于扩展
输入系统 EnhancedInput 旧InputSystem UE5 推荐方案,更灵活
移动方案 CharacterMovementComponent 自定义移动 内置客户端预测和同步
伤害计算 GameplayEffectExecution 自定义RPC GAS 原生方案,与Buff系统集成
弹道实现 Actor + ProjectileMovement 纯计算 视觉表现更好,但需注意性能
AI 系统 BehaviorTree 状态机 可视化编辑,易于调试
摄像机 SpringArm + Camera 自定义CameraManager 简单可靠

附录 B: P0 阶段 GM 命令

命令 功能 用途
GM_LearnSkill <SkillID> 学习指定技能 测试技能系统
GM_SetLevel <Level> 设置角色等级 测试属性计算
GM_AddMP <Amount> 增加蓝量 测试技能释放
GM_SpawnMonster <MonsterID> <Count> 生成怪物 测试战斗
GM_GodMode 无敌模式 测试技能效果
GM_ResetCooldown 重置所有CD 测试技能连招
GM_Damage <Amount> 对自身造成伤害 测试死亡/复活

附录 C: P0 阶段测试用例

C.1 移动测试

用例ID 测试内容 预期结果
MOV-001 PC端WASD移动 角色按方向移动
MOV-002 PC端右键点击移动 角色移动到目标点
MOV-003 手机端虚拟摇杆移动 角色按摇杆方向移动
MOV-004 DS模式移动同步 服务端和客户端位置一致
MOV-005 移动时角色朝向 角色面向移动方向

C.2 技能测试

用例ID 测试内容 预期结果
SKL-001 释放技能1 技能正常释放,有动画和特效
SKL-002 释放后CD 技能进入CD,按钮变灰
SKL-003 CD结束 CD结束,按钮恢复可用
SKL-004 蓝量不足释放 提示蓝量不足,技能不释放
SKL-005 5个技能分别释放 5个技能都能正常释放
SKL-006 技能装配/换装 能更换技能槽中的技能
SKL-007 眩晕时释放技能 无法释放技能
SKL-008 沉默时释放技能 无法释放技能

C.3 战斗测试

用例ID 测试内容 预期结果
CMB-001 技能命中怪物 怪物受伤,显示伤害飘字
CMB-002 怪物HP归零 怪物死亡
CMB-003 怪物追击玩家 怪物向玩家移动
CMB-004 怪物攻击玩家 玩家受伤
CMB-005 Buff施加 Buff图标显示,属性变化
CMB-006 Buff到期 Buff图标消失,属性恢复
CMB-007 控制效果 眩晕/沉默/定身正确生效
CMB-008 DoT伤害 持续伤害每跳正确
相关推荐
其实防守也摸鱼3 小时前
运维--安全与数据库
网络·数据库·学习·安全·安全威胁分析·数据库架构·软件安全
黑不溜秋的3 小时前
C++ STL 容器使用的底层数据结构
c++
灵晔君3 小时前
【C++】标准模板库STL——set /multiset/map /multimap
开发语言·c++
pop_xiaoli3 小时前
【iOS】YYModel源码学习
学习·ios·objective-c·cocoa
嵌入式-老费3 小时前
esp32开发与应用(利用loopback学习can)
学习
沪上企服通4 小时前
上海地区代账服务供给侧的五种架构形态:从 pipeline SLA 到领域深度的选型笔记
笔记·架构
noipp4 小时前
推荐题目:洛谷 P13554 【MX-X15-T1】奶龙龙
c语言·数据结构·c++·算法·编程·洛谷
xianrenli385 小时前
DS5900作业之“氛围(Vibe)”背后的伦理
学习·ai编程·msai
iuu_star5 小时前
Python大模型智能学习平台——设计与实现(AI教学系统)
大数据·人工智能·python·学习