Files
ggj26_heron/Docs/玩家变身次数限制使用说明.md

9.2 KiB
Raw Permalink Blame History

# 玩家变身次数限制使用说明

功能概述

每个SubLevelTileMap都有独立的变身次数限制。当玩家切换到新的TileMap时会自动获得该TileMap配置的变身次数。玩家在当前TileMap内切换鸟类形态时会消耗变身次数次数用完后将无法再变身。

核心机制

  • 每个TileMap在LevelGMBase中配置其最大变身次数
  • 玩家切换到新TileMap时自动重置为该TileMap的最大变身次数
  • 玩家在同一个TileMap内变身时消耗次数
  • PlayerState持有当前的剩余次数但由LevelGMBase根据TileMap来设置

策划配置

1. 在LevelGMBase中配置TileMap变身次数

在GameMode的Details面板中找到00_LevelManage分类:

  • TileMapTransformLimits: TileMap变身次数配置数组
    • 每个元素包含:
      • TileMapTag: TileMap的标签名称必须与场景中的TileMap标签匹配
      • MaxTransformCount: 该TileMap的最大变身次数
        • -1: 无限次变身(默认值)
        • 0: 无法变身(特殊情况)
        • > 0: 具体的可变身次数

2. 配置示例

在LevelGMBase蓝图的Details面板中

TileMapTransformLimits:
  [0]
    TileMapTag: SubLevel_Tutorial     // 教学关卡
    MaxTransformCount: -1              // 无限次,让玩家熟悉
  [1]
    TileMapTag: SubLevel_Normal1       // 普通关卡1
    MaxTransformCount: 5               // 5次变身机会
  [2]
    TileMapTag: SubLevel_Hard1         // 困难关卡1
    MaxTransformCount: 3               // 只有3次变身机会
  [3]
    TileMapTag: SubLevel_Puzzle1       // 解谜关卡1
    MaxTransformCount: 4               // 精确配置次数

工作流程

自动次数管理

  1. 游戏开始时

    • LevelGMBase在BeginPlay时设置初始TileMap
    • 自动调用UpdatePlayerTransformCount
    • PlayerState获得该TileMap配置的变身次数
  2. 切换TileMap时

    • 调用ChangeSubLevelChangeSubLevelByName
    • 自动调用UpdatePlayerTransformCount
    • PlayerState的变身次数重置为新TileMap配置的次数
  3. 玩家变身时

    • 调用PlayerState的SwitchAbility
    • 检查CanTransform()是否返回true
    • 如果次数为0拒绝变身
    • 如果有次数,执行变身并减少次数

日志输出

系统会输出详细的日志:

LogTemp: Switched to TileMap 'SubLevel_Normal1': 5 transform(s) available.
LogTemp: Transform count decreased. Remaining: 4
LogTemp: Warning: Cannot transform - no remaining transform count (0/0)

蓝图接口

1. LevelGMBase接口配置和查询

GetCurrentTransformCount

在LevelGMBase中调用
输出: int32 - 当前TileMap的剩余变身次数-1表示无限次

获取玩家当前的剩余变身次数。

GetTileMapMaxTransformCount

在LevelGMBase中调用
输入: TileMapName (Name) - TileMap的标签名称
输出: int32 - 该TileMap配置的最大变身次数-1表示无限次

查询指定TileMap配置的最大变身次数。

2. PlayerState接口查询和操作

GetRemainingTransformCount

在HeronPlayerState中调用
输出: int32 - 剩余变身次数(-1表示无限次

获取当前剩余的变身次数。

CanTransform

在HeronPlayerState中调用
输出: bool - 是否还能变身

检查是否还能进行变身。返回true表示可以变身剩余次数>0或=-1

AddTransformCount

在HeronPlayerState中调用
输入: Count (int32) - 要增加的次数

增加变身次数。可用于:

  • 拾取道具增加变身次数
  • 完成任务奖励
  • 特殊事件

注意: 如果当前是无限次(-1此方法不会生效。

SwitchAbility

在HeronPlayerState中调用
输入: NewAbilityType (EBirdType) - 要切换到的鸟类型

切换到指定的鸟类形态。此方法会:

  1. 检查是否还有剩余变身次数
  2. 如果次数为0拒绝变身并输出警告
  3. 如果有次数执行变身并将次数减1
  4. 如果是无限次(-1直接变身不消耗次数

工作流程

1. 自动次数管理

当调用SwitchAbility时:

  1. 检查 CanTransform() 是否返回true
  2. 如果返回false次数为0拒绝变身并输出警告日志
  3. 如果返回true且次数>0执行变身并将次数减1
  4. 如果次数为-1无限次直接变身不消耗次数

2. 日志输出

系统会在以下情况输出日志:

  • 变身成功: 显示剩余次数
  • 变身失败: 警告次数已用完

示例日志:

LogTemp: Transform count decreased. Remaining: 4
LogTemp: Warning: Cannot transform - no remaining transform count (0/0)

使用场景

场景1: 切换TileMap时自动设置变身次数

此功能已自动实现,无需额外配置!

当调用ChangeSubLevelChangeSubLevelByName时,会自动:

  • 根据TileMapTransformLimits配置查找该TileMap的最大变身次数
  • 更新PlayerState的MaxTransformCount和RemainingTransformCount
  • 玩家获得新TileMap的变身次数

场景2: UI显示当前剩余变身次数

Event Tick (in UI Widget)
  -> Get Game Mode (cast to LevelGMBase)
  -> Get Current Transform Count
  -> Branch
     >= 0 -> Set Text (剩余: X 次)
     < 0  -> Set Text (剩余: ∞)

或者直接从PlayerState获取

Event Tick (in UI Widget)
  -> Get Owning Player
  -> Get Player State (cast to HeronPlayerState)
  -> Get Remaining Transform Count
  -> Set Text

场景3: 拾取道具增加变身次数

Event OnPickupTransformItem
  -> Get Owning Player
  -> Get Player State (cast to HeronPlayerState)
  -> Add Transform Count (Count = 1)
  -> Print String ("获得额外变身次数!")

场景4: 检查能否变身

// 玩家按下变身键时
Event OnTransformKeyPressed
  -> Get Player State (cast to HeronPlayerState)
  -> Can Transform?
     True -> Switch Ability (NewAbilityType)
     False -> Show "变身次数已用完" Message

场景5: 查询指定TileMap的配置

// 在UI中显示关卡信息
Event UpdateLevelInfo
  -> Get Game Mode (cast to LevelGMBase)
  -> Get TileMap Max Transform Count
     TileMapName: SubLevel_Hard1
  -> Set Text ("该关卡变身次数: " + ToString)

配置建议

不同关卡的次数配置

SubLevel类型 建议次数 说明
教学关卡 -1 (无限) 让玩家熟悉各种形态
普通关卡 5-10 需要策略性使用变身
困难关卡 3-5 更具挑战性
Boss关卡 -1 或 很多 根据boss机制设计
解谜关卡 精确数量 根据解谜需要的最少变身次数+1或2

道具增加次数建议

  • 小道具: +1次
  • 中道具: +2-3次
  • 大道具: +5次或直接设为无限

注意事项

  1. 自动管理: 切换TileMap时会自动重置变身次数无需手动调用
  2. 配置优先: 变身次数由LevelGMBase的TileMapTransformLimits配置决定
  3. 未配置的TileMap: 如果某个TileMap没有在配置数组中默认为无限次-1
  4. 标签匹配: TileMapTag必须与场景中TileMap Actor的标签完全一致
  5. 首次变身: 第一次切换形态也会消耗次数(除非是无限次)
  6. 道具增加: 使用AddTransformCount可以在同一TileMap内增加额外次数
  7. 跨TileMap: 切换到新TileMap时之前TileMap剩余的次数会丢失重新获得新TileMap的次数
  8. 保存系统: 如果需要保存变身次数应该保存当前TileMap和剩余次数

调试建议

  1. 在屏幕上实时显示剩余变身次数
  2. 设置较少的次数如1-2次快速测试限制逻辑
  3. 观察日志输出确认次数变化
  4. 测试无限次(-1和有限次两种模式
  5. 测试道具增加次数的功能
  6. 测试重置次数的功能

示例:完整的配置流程

步骤1: 在LevelGMBase中配置TileMap变身次数

在GameMode蓝图继承自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           // Boss关无限次

步骤2: 使用ChangeSubLevel切换关卡

// 在关卡触发器或通关逻辑中
Event OnLevelComplete
  -> Get Game Mode (cast to LevelGMBase)
  -> Change SubLevel By Name
     TileMapName: SubLevel_Level2
     TransitionTime: 1.0
  // 此时会自动设置玩家的变身次数为6次

步骤3: 可选显示变身次数UI

// 在HUD Widget中
Event Tick
  -> Get Game Mode
  -> Get Current Transform Count
  -> Branch
     Count >= 0 -> Set Text ("变身: " + Count + "次")
     Count < 0  -> Set Text ("变身: ∞")

步骤4: (可选)道具增加变身次数

// 在道具Actor中
Event OnActorBeginOverlap
  -> Cast to HeronPlayer
  -> Get Player State
  -> Add Transform Count (Count = 2)
  -> Show Message ("获得2次额外变身机会")
  -> Destroy Self

这样就完成了整个变身次数限制系统的配置!