游戏结束处理
2023年11月21日 2024年1月11日
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 |
-
按下
Shift-F1
脱离鼠标控制, 点击Detach
查看场景 -
游戏结束后, 所有游戏角色静止, 包括动画, 不接受输入; 榴弹继续运行; 补给仍在自转
-
存在问题: 结束那一刻若步枪仍在射击, 直到弹匣耗尽才停止