个人学习笔记归档玩家在游戏运行时比如在窗口模式下当切换到其它程序的窗口游戏自动暂停的逻辑需要借助C的基类来实现方法为以下步骤添加C类必须在UE中添加这样新的C类才能保证环境配置正确新的类继承GameViewportClient设置好路径和类名即可然后直接打开VS把建立的MyGameViewportClient.h内容修改为// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include CoreMinimal.h #include Engine/GameViewportClient.h #include MyGameViewportClient.generated.h DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnWindowFocusChanged); /** * */ UCLASS() class TESTCODEPROJECT_API UMyGameViewportClient : public UGameViewportClient { GENERATED_BODY() public: UPROPERTY(BlueprintAssignable, Category Window Focus) FOnWindowFocusChanged OnWindowLostFocus; UPROPERTY(BlueprintAssignable, Category Window Focus) FOnWindowFocusChanged OnWindowReceivedFocus; UFUNCTION(BlueprintPure, Category Window Focus) static UMyGameViewportClient* GetMyGameViewportClient(); protected: virtual void LostFocus(FViewport* InViewport) override; virtual void ReceivedFocus(FViewport* InViewport) override; };把MyGameViewportClient.cpp内容修改为// Fill out your copyright notice in the Description page of Project Settings. #include System/MyGameViewportClient.h #include Engine/Engine.h void UMyGameViewportClient::LostFocus(FViewport* InViewport) { Super::LostFocus(InViewport); OnWindowLostFocus.Broadcast(); } void UMyGameViewportClient::ReceivedFocus(FViewport* InViewport) { Super::ReceivedFocus(InViewport); OnWindowReceivedFocus.Broadcast(); } UMyGameViewportClient* UMyGameViewportClient::GetMyGameViewportClient() { if (GEngine GEngine-GameViewport) { // 获取引擎当前的 Viewport 并转换成我们自己的类 return CastUMyGameViewportClient(GEngine-GameViewport); } return nullptr; }保存源码后编译注意只用关注仅生成列表中是否有错误这样就可以通过获取My Game Viewport Client绑定相关事件在游戏运行时比如在窗口模式下当玩家切换到其它程序的窗口游戏自动暂停等逻辑