GameMode 和 Pawn 的 Auto Possess Player 属性

在 Unreal Engine 中,GameModePawnAuto Possess Player 属性分别用于控制玩家角色(Pawn)和玩家控制器(Player Controller)的行为,它们在管理玩家与角色之间的关系上有所不同。理解它们的区别和应用场景有助于更好地控制游戏的玩法逻辑。

一、GameMode 中设置默认 Pawn

1. 概念

  • GameMode 是用于定义游戏规则和玩家管理的类。它主要用于控制游戏的全局设置,包括:
    • 默认 Pawn (DefaultPawnClass):当玩家加入游戏时,默认生成的 Pawn 类型。
    • 默认 PlayerController (PlayerControllerClass):控制 Pawn 的控制器类型。
    • 默认 HUD (HUDClass):游戏中的用户界面类。
    • 重生规则、玩家分配、关卡目标等

2. 设置默认 Pawn 类的作用

  • 当玩家第一次进入游戏(通常是 BeginPlay 时),GameMode 会根据设置自动生成 DefaultPawnClass 的实例,并由 PlayerController 自动控制。
  • 如果在 GameMode 中设置了 DefaultPawnClass,则该类会在游戏开始时自动生成,并被分配给第一个玩家控制器(通常是 PlayerController 0)。
  • 如果游戏中有多个玩家或是多人游戏模式,GameMode 还会决定如何生成和分配 Pawn

3. 典型用法

  • 用于单人游戏中设置玩家的默认角色,例如设置 DefaultPawnClassMyCharacter 类,这样每次玩家进入游戏时,都会自动生成并控制 MyCharacter 实例。
  • 在多人游戏中,用于为每个玩家生成默认的 Pawn 实例,并将控制权分配给相应的 PlayerController

4. 示例代码

// MyGameMode.h class AMyGameMode : public AGameModeBase { GENERATED_BODY() public: AMyGameMode(); protected: virtual void BeginPlay() override; };

 

// MyGameMode.cpp AMyGameMode::AMyGameMode() { // 设置默认的 Pawn 类为 MyCharacter DefaultPawnClass = AMyCharacter::StaticClass(); } void AMyGameMode::BeginPlay() { Super::BeginPlay(); // 其他初始化逻辑 }

在这个例子中,DefaultPawnClass 设置为 AMyCharacter,因此每次玩家进入游戏时,都会生成并控制一个 AMyCharacter 实例。

二、Auto Possess Player 属性

1. 概念

  • Auto Possess PlayerPawn 类中的一个属性,它决定了该 Pawn 在游戏开始时是否会自动被某个 PlayerController 控制。
  • 该属性有以下几种选项:
    • Disabled:不自动控制该 Pawn
    • Player 0:游戏启动时,由 PlayerController 0 控制该 Pawn
    • Player 1:游戏启动时,由 PlayerController 1 控制该 Pawn(用于多人游戏)。
    • Placed in World or Spawned:该 Pawn 被放置在场景中或动态生成时,自动分配给最近的 PlayerController

2. 设置 Auto Possess Player 的作用

  • 该属性允许你在不依赖 GameMode 默认设置的情况下,自定义某个特定 Pawn 在游戏开始时由哪个玩家控制。
  • 主要用于场景中放置的 Pawn 或动态生成的 Pawn,而不是通过 GameMode 生成的默认 Pawn

3. 典型用法

  • 场景中有多个 Pawn 实例,而你希望特定的 Pawn 在游戏开始时由某个特定的 PlayerController 控制。
  • 例如,一个赛车游戏中,你可能有多个赛车 Pawn 被放置在场景中,你可以设置其中一个的 Auto Possess PlayerPlayer 0,这样当游戏开始时,这辆车会被第一个玩家控制。

4. 示例代码

// MyCarPawn.h class AMyCarPawn : public APawn { GENERATED_BODY() public: AMyCarPawn(); };

// MyCarPawn.cpp AMyCarPawn::AMyCarPawn() { // 设置在游戏启动时由 PlayerController 0 控制 AutoPossessPlayer = EAutoReceiveInput::Player0; }

在这个例子中,AutoPossessPlayer 被设置为 Player 0,因此当游戏开始时,这个 Pawn 会被第一个玩家控制,而不依赖于 GameMode 的默认 Pawn 设置。

三、二者的区别与关系

1. 适用场景不同

  • GameMode 设置默认 Pawn

    • 适用于管理整个游戏流程和规则,包括玩家的生成和控制等。
    • 通常用于控制游戏全局的玩家生成逻辑,例如单人游戏或多人游戏中的默认玩家角色设置。
  • Auto Possess Player 属性

    • 适用于特定场景中的 Pawn,无需通过 GameMode 生成。
    • 通常用于自定义场景中放置的 Pawn 或动态生成的 Pawn,以覆盖默认的 GameMode 行为。

2. 控制权的分配

  • GameMode

    • 控制整个游戏中的玩家生成和分配,通常用于全局管理。
    • 每次游戏启动时,根据 DefaultPawnClass 自动生成 Pawn,并将其分配给对应的 PlayerController
  • Auto Possess Player

    • 控制场景中已经放置的 Pawn 或动态生成的 Pawn 是否自动被特定玩家控制。
    • 通常用于覆盖 GameMode 的默认行为,针对特定场景中的 Pawn 进行自定义控制。

3. 使用组合

  • 在实际项目中,通常两者结合使用。
    • 使用 GameMode 设置默认玩家的 Pawn 类,用于生成全局的玩家角色。
    • 使用 Auto Possess Player 来控制特定场景中的 Pawn 行为,例如在游戏开始时将某个已经放置在场景中的 Pawn 分配给特定的玩家控制器。

四、应用场景

1. 单人游戏

  • 在单人游戏中,通常使用 GameMode 来设置默认的 Pawn 类,这样玩家每次进入游戏时都会自动生成一个新的 Pawn 实例。
  • 如果你有一个放置在场景中的 Pawn,并希望玩家在游戏开始时控制它,可以在该 PawnAuto Possess Player 属性中选择 Player 0

2. 多人游戏

  • 在多人游戏中,GameMode 可以管理多个玩家的 Pawn 实例生成和分配。
  • 在一些特殊场景(如竞技场游戏),可以使用 Auto Possess Player 属性来控制哪些玩家控制哪些场景中的 Pawn 实例。

3. 特殊控制逻辑

  • 在某些情况下,例如有多个不同类型的车辆或角色,你可以使用 Auto Possess Player 来为不同的 Pawn 设置不同的控制器,而不是使用 GameMode 的默认设置。

五、总结

  • GameMode 中的 DefaultPawnClass 主要用于全局管理和默认设置,适用于管理玩家的生成和分配。
  • Auto Possess Player 属性用于特定场景中 Pawn 的控制分配,适用于覆盖 GameMode 的默认设置,指定某个特定 Pawn 的控制权。
  • 二者可以结合使用,以实现更加灵活的玩家和 Pawn 控制逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值