UE4 通过按键切换不同的HUD
咱们在玩游戏的时候,通常会和界面进行各种各样的互动,而且会动都是在不同的界面上,所以需要在不同的界面上进行切换或者多个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相关推荐
- 虚幻4 UE4 绑定按键操作及切换视角
虚幻4绑定按键操作切换视角 虚幻4绑定按键操作 常用方法 点击编辑->项目设置->引擎->输入 这里有两种映射.如果按键不需要值,如跑步速度等,则使用操作映射即可:如果需要值,则使用 ...
- ue4白天夜晚切换_白天/夜晚编码的美好时光...多年来最佳
ue4白天夜晚切换 It's 12:18am and I'm hopped up on at least 96 ounces of Diet Pepsi and vibrating with the ...
- Arduino ESP32 WIFI 蓝牙模式触控按键切换
Arduino ESP32 WIFI &蓝牙模式触控按键切换 相关篇<Arduino ESP32自带触摸传感器功能测试> <ESP32电容式触摸传感器引脚实例> ESP ...
- 使用Arduino开发ESP32(二十一):WiFiBlueToothSwitch例程,按键切换esp32为蓝牙或wifi模式
之前写项目正好卡在这个地方,结果发现了这个官方例程 顺带就写篇博客 虽说是按键切换模式,但官方例程并未使用中断 代码 // 演示如何在wifi和蓝牙模式之间切换,或者同时使用 // 按键绑定在GPIO ...
- UE4:按键按下触发声音事件,离开位置声音停止
UE4:按键按下触发声音事件,离开位置声音停止 基本需求 在盒体触发盒内,按下[向下]键声音开始播放.离开该区域声音停止. 需要注意的内容: 连续按多次的情况应该处理为:只能按一次,按后续次数无反应. ...
- 【python】Python实现模拟按键切换浏览器标签
Python实现模拟按键切换浏览器标签 author:juliusyang 原理:模拟按下浏览器标签切换快捷键:ctrl + 数字键 import time import win32api impor ...
- 杰理之按键切换默认 EQ 和 EQ 工具调节的 EQ【篇】
EQ 工具和程序里面必须设置的是硬件 EQ 1.#define USE_EQ_DBG_MALLOC 0 2 . 自己添加一个按键切换 EQ 的函数 void user_eq_change(u8 eq_ ...
- 键盘按键切换电脑显示屏的输入源的方法
键盘按键切换电脑显示屏的输入源的方法 一.查看显示屏的输入源 如上图电脑显示屏可以选择两个输入源,接下来需要下载两款软件来实现键盘切换输入源. 二.下载必需软件 1.下载ControlMyMonito ...
- 通过按键切换LED颜色
RGB LED七彩跳变 通过按键切换LED颜色 实验现象 按键每次按下,LED切换一种颜色,依次为红 绿 蓝 黄 紫 青 白 原理图 代码编写 #define led_r 2 #define led_ ...
最新文章
- Markdown解决图片存储问题
- 今日arXiv精选 | 23篇顶会论文:ICASSP / ICCV / CIKM / ICME / AAAI
- java类的子类_java 查找类的所有子类
- C语言试题五十八之请编写函数fun,:计算并输出下列多项式的值(sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n! )
- java代码测试---插入排序和选择排序
- 平移刚体上各点的加速度和速度_大物学习笔记(一)——刚体力学
- BZOJ1185[HNOI2007] 最小矩形覆盖
- IDEA开发及运行第一个Android项目
- 今年这形势,程序员被裁员如何申请N+1,本文教科书 式 案例 供参考
- 2022年防爆电气考试题及答案
- 微信小程序—连接MQTT
- Sonatype Nexus Maven仓库搭建和管理
- 微信扫码---进入小程序指定页面(传参)
- H5版仿制微信跳一跳小游戏,网页版仿微信跳一跳小游戏源码,实现了跳一跳的基本核心功能
- 群晖服务器+微信同步,群晖服务器 云同步
- 斯坦福大学(吴恩达) 机器学习课后习题详解 第三周 逻辑回归
- 调用Feign接口报错:HttpMessageNotReadableException:JSON parse error:Illegal character ((CTRL-CHAR, code 31)
- 重新编译TensorFlow1.4源代码支持SSE-AVX-FMA指令集 (Python3.5版本)
- 微信最强花式操作,带你玩转 wxpy
- hbase表按rowkey和时间清理数据