Files
ggj26_heron/Docs/变身次数限制实现总结.md

3.9 KiB
Raw Permalink Blame History

玩家变身次数限制 - 实现总结

实现概述

已成功实现基于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

特性

  1. 自动管理: 切换TileMap时自动设置变身次数无需手动配置
  2. 灵活配置: 每个TileMap可独立配置次数支持无限次-1
  3. 友好接口: 提供完整的蓝图接口用于查询和修改
  4. 详细日志: 输出详细的日志便于调试
  5. 道具支持: 可以通过道具在同一TileMap内增加额外次数

注意事项

  1. 未配置的TileMap默认为无限次-1
  2. TileMapTag必须与场景中的TileMap标签完全匹配
  3. 切换TileMap会重置变身次数之前的剩余次数会丢失
  4. 第一次变身也会消耗次数(除非是无限次)
  5. 如需保存进度应保存当前TileMap和剩余次数

文档

详细使用说明请参考:Docs/玩家变身次数限制使用说明.md