3.9 KiB
3.9 KiB
玩家变身次数限制 - 实现总结
实现概述
✅ 已成功实现基于TileMap的玩家变身次数限制系统。
核心设计:
- LevelGMBase持有所有TileMap的变身次数配置
- 切换TileMap时自动更新PlayerState的变身次数
- PlayerState执行变身时检查并消耗次数
- 每个TileMap可以独立配置变身次数
代码修改清单
1. LevelGMBase.h
- ✅ 添加
FTileMapTransformLimit结构体(TileMap标签 + 最大变身次数) - ✅ 添加
TileMapTransformLimits配置数组(策划在编辑器中配置) - ✅ 添加
CurrentTileMapName私有成员(跟踪当前TileMap) - ✅ 添加
UpdatePlayerTransformCount(FName)方法(更新玩家次数) - ✅ 添加
GetCurrentTransformCount()蓝图接口(查询当前剩余次数) - ✅ 添加
GetTileMapMaxTransformCount(FName)蓝图接口(查询TileMap配置)
2. LevelGMBase.cpp
- ✅ 在
CreateLogicCamera()中设置初始TileMap并更新变身次数 - ✅ 在
ChangeSubLevel()中切换TileMap时自动更新变身次数 - ✅ 实现
UpdatePlayerTransformCount()- 根据TileMap配置更新PlayerState - ✅ 实现
GetCurrentTransformCount()- 从PlayerState获取当前剩余次数 - ✅ 实现
GetTileMapMaxTransformCount()- 查询指定TileMap的配置
3. HeronPlayerState.h
- ✅ 添加
MaxTransformCount属性(由LevelGMBase设置) - ✅ 添加
RemainingTransformCount属性(运行时剩余次数) - ✅ 添加
GetRemainingTransformCount()方法 - ✅ 添加
CanTransform()方法 - ✅ 添加
AddTransformCount(int32)方法 - ✅ 添加
ResetTransformCount()方法(保留但不需要手动调用)
4. HeronPlayerState.cpp
- ✅ 移除构造函数中的次数初始化(由LevelGMBase管理)
- ✅ 在
SwitchAbility()中添加次数检查和消耗逻辑
工作流程
游戏开始
└─> LevelGMBase::BeginPlay()
└─> CreateLogicCamera()
└─> UpdatePlayerTransformCount(DefaultTileMapTag)
└─> 查找配置并设置PlayerState的变身次数
玩家切换TileMap
└─> ChangeSubLevel() / ChangeSubLevelByName()
└─> UpdatePlayerTransformCount(NewTileMapName)
└─> 重置PlayerState的变身次数为新TileMap的配置
玩家变身
└─> PlayerState::SwitchAbility()
└─> 检查 CanTransform()
├─> true: 执行变身,减少次数
└─> false: 拒绝变身,输出警告
配置示例
在LevelGMBase蓝图的Details面板中:
TileMapTransformLimits:
[0] TileMapTag: SubLevel_Tutorial, MaxTransformCount: -1 // 无限次
[1] TileMapTag: SubLevel_Level1, MaxTransformCount: 8 // 8次
[2] TileMapTag: SubLevel_Level2, MaxTransformCount: 6 // 6次
[3] TileMapTag: SubLevel_Boss1, MaxTransformCount: -1 // 无限次
蓝图使用示例
显示剩余次数UI
Get Game Mode -> Get Current Transform Count -> Set Text
道具增加次数
Get Player State -> Add Transform Count (Count = 1)
检查能否变身
Get Player State -> Can Transform? -> Branch
特性
- 自动管理: 切换TileMap时自动设置变身次数,无需手动配置
- 灵活配置: 每个TileMap可独立配置次数,支持无限次(-1)
- 友好接口: 提供完整的蓝图接口用于查询和修改
- 详细日志: 输出详细的日志便于调试
- 道具支持: 可以通过道具在同一TileMap内增加额外次数
注意事项
- 未配置的TileMap默认为无限次(-1)
- TileMapTag必须与场景中的TileMap标签完全匹配
- 切换TileMap会重置变身次数,之前的剩余次数会丢失
- 第一次变身也会消耗次数(除非是无限次)
- 如需保存进度,应保存当前TileMap和剩余次数
文档
详细使用说明请参考:Docs/玩家变身次数限制使用说明.md