咱们在玩游戏的时候,通常会和界面进行各种各样的互动,而且会动都是在不同的界面上,所以需要在不同的界面上进行切换或者多个HUD重叠显示在一起。
首先创建两个HUD


2.重新定义一个PlayerController类

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "ChangeHUD/IChangeHUD.h"
#include "CameraPlayerController.generated.h"/****/
UCLASS()
class TRUEFPSPROJECT_API ACameraPlayerController : public APlayerController, public IChangeHUD {GENERATED_BODY()public:ACameraPlayerController();//编辑器内UMG资产的引用UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AAA")TSubclassOf<class UUserWidget> mainHUDAsset;//创建后用于空间变量UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AAA")UUserWidget* mainHUDMenu;//编辑器内UMG资产的引用UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AAA")TSubclassOf<class UUserWidget> subHUDAsset;//创建后用于空间变量UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AAA")UUserWidget* subHUDMenu;virtual void BeginPlay();virtual void changeHUD()override;
private:int32 HUDChoose = 0;//切换不同的HUD界面UUserWidget* _currentHUD = nullptr;
};
// Fill out your copyright notice in the Description page of Project Settings.#include "CameraPlayerController.h"
#include "Blueprint/UserWidget.h"
#include "ChangeHUD/ChangeHUDManager.h"ACameraPlayerController::ACameraPlayerController() {ChangeHUDMgr()->changeHUDInterface = this;
}void ACameraPlayerController::BeginPlay() {Super::BeginPlay();if (mainHUDAsset) {mainHUDMenu = CreateWidget<UUserWidget>(this, mainHUDAsset);}if (subHUDAsset) {subHUDMenu = CreateWidget<UUserWidget>(this, subHUDAsset);}
}void ACameraPlayerController::changeHUD() {if (_currentHUD) {_currentHUD->RemoveFromViewport();}HUDChoose += 1;if (HUDChoose%3 == 0){_currentHUD = mainHUDMenu;_currentHUD->AddToViewport();} else if(HUDChoose % 3 == 1) {_currentHUD = subHUDMenu;_currentHUD->AddToViewport();}else{mainHUDMenu->AddToViewport();subHUDMenu->AddToViewport();}}

定义一个接口类和接口管理类

#pragma once
class IChangeHUD {public:virtual void changeHUD() = 0;
};
#pragma once#define ChangeHUDMgr() (ChangeHUDManager::getInstance())class ChangeHUDManager {private:ChangeHUDManager();static ChangeHUDManager* _instance;
public:static ChangeHUDManager* getInstance();class IChangeHUD* changeHUDInterface;
};
#include "ChangeHUDManager.h"
#include "IChangeHUD.h"ChangeHUDManager* ChangeHUDManager::_instance = new ChangeHUDManager;ChangeHUDManager::ChangeHUDManager() {}ChangeHUDManager* ChangeHUDManager::getInstance() {return _instance;
}

在角色类中通过按键H来调用:

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "SpawnActor.generated.h"UCLASS()
class TRUEFPSPROJECT_API ASpawnActor : public AActor {GENERATED_BODY()public:// Sets default values for this actor's propertiesASpawnActor();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:// Called every framevirtual void Tick(float DeltaTime) override;public:UPROPERTY(EditAnywhere, Category = "AAA")TSubclassOf<class AFloatingActor> subFloatingActor;float baseTime = 0.0;
};
// Fill out your copyright notice in the Description page of Project Settings.#include "SpawnActor.h"
#include "FloatingActor.h"// Sets default values
ASpawnActor::ASpawnActor() {// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;}// Called when the game starts or when spawned
void ASpawnActor::BeginPlay() {Super::BeginPlay();}// Called every frame
void ASpawnActor::Tick(float DeltaTime) {Super::Tick(DeltaTime);if ((baseTime += DeltaTime) <= 3.0){return;}baseTime = 0.0;UWorld* world = GetWorld();if (world){FVector spawnLocation = GetActorLocation();FRotator spwanRotation = GetActorRotation();FActorSpawnParameters spawnParam;spawnParam.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButDontSpawnIfColliding;world->SpawnActor<AFloatingActor>(subFloatingActor, spawnLocation, spwanRotation, spawnParam);}
}

点击【运行】

aaa

UE4 通过按键切换不同的HUD相关推荐

  1. 虚幻4 UE4 绑定按键操作及切换视角

    虚幻4绑定按键操作切换视角 虚幻4绑定按键操作 常用方法 点击编辑->项目设置->引擎->输入 这里有两种映射.如果按键不需要值,如跑步速度等,则使用操作映射即可:如果需要值,则使用 ...

  2. ue4白天夜晚切换_白天/夜晚编码的美好时光...多年来最佳

    ue4白天夜晚切换 It's 12:18am and I'm hopped up on at least 96 ounces of Diet Pepsi and vibrating with the ...

  3. Arduino ESP32 WIFI 蓝牙模式触控按键切换

    Arduino ESP32 WIFI &蓝牙模式触控按键切换 相关篇<Arduino ESP32自带触摸传感器功能测试> <ESP32电容式触摸传感器引脚实例> ESP ...

  4. 使用Arduino开发ESP32(二十一):WiFiBlueToothSwitch例程,按键切换esp32为蓝牙或wifi模式

    之前写项目正好卡在这个地方,结果发现了这个官方例程 顺带就写篇博客 虽说是按键切换模式,但官方例程并未使用中断 代码 // 演示如何在wifi和蓝牙模式之间切换,或者同时使用 // 按键绑定在GPIO ...

  5. UE4:按键按下触发声音事件,离开位置声音停止

    UE4:按键按下触发声音事件,离开位置声音停止 基本需求 在盒体触发盒内,按下[向下]键声音开始播放.离开该区域声音停止. 需要注意的内容: 连续按多次的情况应该处理为:只能按一次,按后续次数无反应. ...

  6. 【python】Python实现模拟按键切换浏览器标签

    Python实现模拟按键切换浏览器标签 author:juliusyang 原理:模拟按下浏览器标签切换快捷键:ctrl + 数字键 import time import win32api impor ...

  7. 杰理之按键切换默认 EQ 和 EQ 工具调节的 EQ【篇】

    EQ 工具和程序里面必须设置的是硬件 EQ 1.#define USE_EQ_DBG_MALLOC 0 2 . 自己添加一个按键切换 EQ 的函数 void user_eq_change(u8 eq_ ...

  8. 键盘按键切换电脑显示屏的输入源的方法

    键盘按键切换电脑显示屏的输入源的方法 一.查看显示屏的输入源 如上图电脑显示屏可以选择两个输入源,接下来需要下载两款软件来实现键盘切换输入源. 二.下载必需软件 1.下载ControlMyMonito ...

  9. 通过按键切换LED颜色

    RGB LED七彩跳变 通过按键切换LED颜色 实验现象 按键每次按下,LED切换一种颜色,依次为红 绿 蓝 黄 紫 青 白 原理图 代码编写 #define led_r 2 #define led_ ...

最新文章

  1. Markdown解决图片存储问题
  2. 今日arXiv精选 | 23篇顶会论文:ICASSP / ICCV / CIKM / ICME / AAAI
  3. java类的子类_java 查找类的所有子类
  4. C语言试题五十八之请编写函数fun,:计算并输出下列多项式的值(sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n! )
  5. java代码测试---插入排序和选择排序
  6. 平移刚体上各点的加速度和速度_大物学习笔记(一)——刚体力学
  7. BZOJ1185[HNOI2007] 最小矩形覆盖
  8. IDEA开发及运行第一个Android项目
  9. 今年这形势,程序员被裁员如何申请N+1,本文教科书 式 案例 供参考
  10. 2022年防爆电气考试题及答案
  11. 微信小程序—连接MQTT
  12. Sonatype Nexus Maven仓库搭建和管理
  13. 微信扫码---进入小程序指定页面(传参)
  14. H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码,实现了跳一跳的基本核心功能
  15. 群晖服务器+微信同步,群晖服务器 云同步
  16. 斯坦福大学(吴恩达) 机器学习课后习题详解 第三周 逻辑回归
  17. 调用Feign接口报错:HttpMessageNotReadableException:JSON parse error:Illegal character ((CTRL-CHAR, code 31)
  18. 重新编译TensorFlow1.4源代码支持SSE-AVX-FMA指令集 (Python3.5版本)
  19. 微信最强花式操作,带你玩转 wxpy
  20. hbase表按rowkey和时间清理数据

热门文章

  1. 寺库不再值得认可:违法案例频现,“便宜货”让罗敏和趣店亏惨
  2. LYZ-Ice Skates
  3. GTK+实现linux聊天室代码详解-clientr端
  4. 清华计算机系必考科目,清华大学选考科目要求
  5. 100%正确率识别票据从金融领域切入挖掘文字识别的巨大价值
  6. chall.tasteless.eu 中的注入题
  7. 剑指Offer——迅雷笔试题+知识点总结
  8. 今天好无聊……悟空……你变成女妖精吧……
  9. 坚持学英语 -- 公司前台MM 一日英语小记
  10. 策略模式、观察者模式、状态模式原理及实例