六一的部落格


关关难过关关过,前路漫漫亦灿灿。



Turn Pawns Off / Disable Input


API导航

-
APawn::TurnOff 使Pawn静止
APawn::DisableInput 停止接受收输入: 只要传入的控制器指针为空就可以达到该效果

GameModeBase添加接口, 在游戏结束后调用

private

ShootThemUp: STUGameModeBase.h

1void GameOver();

在GameTimerUpdate中调用

ShootThemUp: STUGameModeBase.cpp

 1if (CurrentRound + 1 <= GameData.RoundsNum)
 2{
 3    // ...
 4}
 5else
 6{
 7    GameOver();
 8    // UE_LOG(LogSTUGameModeBase, Display, TEXT("======= GAME OVER ======="));
 9    // LogPlayerInfo();
10}

将日志输出移动到GameOver


遍历场景中所有Pawn: 使Pawn静止, 停止接受输入

 1// #include "EngineUtils.h"
 2
 3for (auto Pawn : TActorRange<APawn>(GetWorld()))
 4{
 5    if (Pawn)
 6    {
 7        Pawn->TurnOff();
 8        Pawn->DisableInput(nullptr);
 9    }
10}

完整实现

ShootThemUp: STUGameModeBase.cpp

 1#include "EngineUtils.h"
 2
 3void ASTUGameModeBase::GameOver()
 4{
 5    UE_LOG(LogSTUGameModeBase, Display, TEXT("======= GAME OVER ======="));
 6    LogPlayerInfo();
 7
 8    for (auto Pawn : TActorRange<APawn>(GetWorld()))
 9    {
10        if (!Pawn) continue;
11
12        Pawn->TurnOff();
13        Pawn->DisableInput(nullptr);
14    }
15}

查看

BP_STUGameModeBase

-
Players Num 4
Rounds Num 2
Round Time 3
  1. 按下 Shift-F1 脱离鼠标控制, 点击 Detach 查看场景


  2. 游戏结束后, 所有游戏角色静止, 包括动画, 不接受输入; 榴弹继续运行; 补给仍在自转


  3. 存在问题: 结束那一刻若步枪仍在射击, 直到弹匣耗尽才停止


游戏结束处理


Turn Pawns Off / Disable Input


API导航

-
APawn::TurnOff 使Pawn静止
APawn::DisableInput 停止接受收输入: 只要传入的控制器指针为空就可以达到该效果

GameModeBase添加接口, 在游戏结束后调用

private

ShootThemUp: STUGameModeBase.h

1void GameOver();

在GameTimerUpdate中调用

ShootThemUp: STUGameModeBase.cpp

 1if (CurrentRound + 1 <= GameData.RoundsNum)
 2{
 3    // ...
 4}
 5else
 6{
 7    GameOver();
 8    // UE_LOG(LogSTUGameModeBase, Display, TEXT("======= GAME OVER ======="));
 9    // LogPlayerInfo();
10}

将日志输出移动到GameOver


遍历场景中所有Pawn: 使Pawn静止, 停止接受输入

 1// #include "EngineUtils.h"
 2
 3for (auto Pawn : TActorRange<APawn>(GetWorld()))
 4{
 5    if (Pawn)
 6    {
 7        Pawn->TurnOff();
 8        Pawn->DisableInput(nullptr);
 9    }
10}

完整实现

ShootThemUp: STUGameModeBase.cpp

 1#include "EngineUtils.h"
 2
 3void ASTUGameModeBase::GameOver()
 4{
 5    UE_LOG(LogSTUGameModeBase, Display, TEXT("======= GAME OVER ======="));
 6    LogPlayerInfo();
 7
 8    for (auto Pawn : TActorRange<APawn>(GetWorld()))
 9    {
10        if (!Pawn) continue;
11
12        Pawn->TurnOff();
13        Pawn->DisableInput(nullptr);
14    }
15}

查看

BP_STUGameModeBase

-
Players Num 4
Rounds Num 2
Round Time 3
  1. 按下 Shift-F1 脱离鼠标控制, 点击 Detach 查看场景


  2. 游戏结束后, 所有游戏角色静止, 包括动画, 不接受输入; 榴弹继续运行; 补给仍在自转


  3. 存在问题: 结束那一刻若步枪仍在射击, 直到弹匣耗尽才停止