UE5切换关卡函数OpenLevel,输入模式结构体,UI界面

server/2025/3/4 11:06:16/

1.输入模式结构体

  • FInputModeGameOnly:玩家只能与游戏世界交互,UI 不可交互。
  • FInputModeGameAndUI:玩家可以与游戏世界和 UI 同时交互。
  • FInputModeUIOnly:玩家只能与 UI 交互,无法与游戏世界进行互动。

        FInputModeGameOnly构造函数,默认设置输入模式为仅游戏输入模式,鼠标光标会隐藏,所有输入都会被传递到游戏。没有额外的设置函数,FInputModeGameOnly 只会设置输入为游戏模式,不需要额外的配置。

  FInputModeGameAndUI:构造函数,默认设置输入模式为游戏和 UI 模式。在此模式下,玩家可以同时与游戏和 UI 交互。

        FInputModeUIOnly:构造函数,默认设置输入模式为仅 UI 输入模式。在此模式下,玩家只能与 UI 进行交互,游戏输入会被禁用

        函数SetWidgetToFocus(TSharedPtr<SWidget> InWidgetToFocus) 参数是某个UI界面的指针,作用是将只关注这个InWidgetToFocus界面

        函数SetLockMouseToViewportBehavior(EMouseLockMode InMouseLockMode)设置鼠标模式,EMouseLockMode这个枚举中有注释

        这两个函数可能只会在FInputModeGameAndUI,和FInputModeUIOnly使用。

2.OpenLevel函数,切换关卡

#include "Kismet/GameplayStatics.h"UGameplayStatics::OpenLevel(const UObject* WorldContextObject,    // 一般是UWorld指针,或者是APlayerController指针。UWorld指针可以通过GetWorld()函数获得 , APlayerController看你在哪个类中,查询具体的获得方式,一般是UWorldFName LevelName,            //切换到哪个关卡的名字bool bAbsolute = true,    //是否是绝对路径 ,一般是默认值,第二个参数给地图的名字即可FString Options = FString(TEXT(""))    // 不知到是干什么用的,
)

3.UI界面

        1.创建自UserWidget的子类,(UE中还有一个HUD也是于UI相关的类,我的理解是如果想显示角色的血量,子弹数等比较小的UI使用HUD,如果是游戏初始界面使用UserWidget)

        2.类中代码 , MenuSetup函数设置为蓝图可以调用的函数,使用AddToViewport显示UI界面,设置FInputModeUIOnly,我在点击按钮后设置了游戏模式函数是Button0Printf,在Initilize函数中绑定,Button0是按钮的名字,要和UE中的UI编辑器中的名字一样,SetGameModel函数中设置FInputModeGameOnly InputModeData;SetInputMode(InputModeData);两行。在是地图的关卡蓝图中调用menuSetup函数,中间的界面是create widget选择Class需要创建这个UI类的蓝图类,在切换关卡后如果角色不可以操作可以查看输入模式结构体有没有重新设置成FInputModeGameOnly或者FInputModeGameAndUI

class JUMP_API UStartUserWidget : public UUserWidget
{GENERATED_BODY()public:UFUNCTION(BlueprintCallable)void MenuSetup();protected:virtual bool Initialize() override;public:UPROPERTY(meta = (BindWidget))UButton* Button0;private:UFUNCTION()void Button0Printf();
};void UStartUserWidget::MenuSetup()
{AddToViewport();SetVisibility(ESlateVisibility::Visible);/* 设置可见性 */bIsFocusable = true;/* 设置聚焦模式 */UWorld* World = GetWorld();if (World){APlayerController* PlayerController = World->GetFirstPlayerController();if (PlayerController){FInputModeUIOnly InputModeData;InputModeData.SetWidgetToFocus(TakeWidget());/* 设置只关注与小部件 */InputModeData.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);/* 设置鼠标光标锁定 */PlayerController->SetInputMode(InputModeData);//设置模式集中于界面PlayerController->SetShowMouseCursor(true);/* 看到光标 */}}
}bool UStartUserWidget::Initialize()
{if (!Super::Initialize()){return false;}if (Button0){Button0->OnClicked.AddDynamic(this, &UStartUserWidget::Button0Printf);//绑定回调函数}return true;
}void UStartUserWidget::Button0Printf()
{UWorld* World = GetWorld();if (World){UGameplayStatics::OpenLevel(World, FName(TEXT("JumpMap")));AJumpCharacterController* PlayerController = Cast<AJumpCharacterController>(World->GetFirstPlayerController());if (PlayerController){PlayerController->SetGameModel();}}else{UE_LOG(LogTemp, Warning, TEXT("World pointer is nullptr"));}
}

 4.关于UE中父类容器的概念

        父类容器的概念通常是指 一个类或对象包含并管理其他对象或数据的结构,比如UWorld中管理这很多AActor。使用GetOuter()函数可以返回当前类的父类容器,父类容器绝对不是当前类的父类。

5.如果Cast后编译器报错可以先将Cast后的类的头文件include


http://www.ppmy.cn/server/172313.html

相关文章

C++实现3D(EasyX)详细教程

一、关于3D 我们看见&#xff0c;这两个三角形是相似的&#xff0c;因此计算很简单 若相对物体的方向是斜的&#xff0c;计算三角函数即可 不会的看代码 二、EasyX简介 initgraph(长,宽) 打开绘图 或initgraph(长,宽…

IDEA 接入 Deepseek

在本篇文章中&#xff0c;我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;让你的 AI 编程助手更智能&#xff0c;提高开发效率。 一、前置准备 在开始之前&#xff0c;请确保你已经具备以下条件&#xff1a; 安装了 JetBrains IDEA&…

ctfshow——vim临时文件泄露

提示&#xff1a;发现网页有个错别字&#xff1f;赶紧在生产环境vim改下&#xff0c;不好&#xff0c;死机了。 题目如下图所示。 一、 首先&#xff0c;我们先对提示进行分析本题&#xff0c;他说网页存在错别字&#xff0c;并且在vim环境下进行了修改&#xff0c;但是没修改…

【接口封装】——16、等级迭代图标实现

解释&#xff1a; 1、封装内容&#xff1a;1个按钮画上两张图片&#xff08;等级迭代&#xff09; 2、参数&#xff1a;需要描述的等级 函数定义&#xff1a; #include <QTimer> #define LV_PNG "..." #define LV_PNG_HEIGHT 7 #define LV_PNG_WIDTH …

2016年蓝桥杯第七届CC++大学B组真题及代码

目录 1A&#xff1a;煤球数目&#xff08;3分填空_简单枚举&#xff09; 2B&#xff1a;生日蜡烛&#xff08;5分填空_简单枚举&#xff09; 3C&#xff1a;凑算式&#xff08;11分填空_全排列&#xff09; 4D&#xff1a;快速排序&#xff08;9分代码填空&#xff09; 5E…

第十五届蓝桥杯:dfs之数字接龙

#include <iostream> using namespace std; const int N 300; int a[N][N];//存值 int b[N][N];//判断某个点是否出现过 int n,k; string path; int dx[] {-1,-1,0,1,1,1,0,-1}; int dy[] {0,1,1,1,0,-1,-1,-1}; bool dfs(int x,int y,int cur,int pos) {if(pos n*n…

Java—初始多线程

多线程的理解 进程&#xff1a; 进程是程序的基本执行实体 每一个运行的软件都是一个进程 线程&#xff1a; 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 简单理解&#xff1a;应用软件中互相独立&#xff0c;可以…

npm ERR! code 128 npm ERR! An unknown git error occurred

【问题描述】 【问题解决】 管理员运行cmd&#xff08;右键window --> 选择终端管理员&#xff09; 执行命令 git config --global url.“https://”.insteadOf ssh://git cd 到项目目录 重新执行npm install 个人原因&#xff0c;这里执行npm install --registryhttps:…