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

devtools/2025/3/4 1:02:37/

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/devtools/164326.html

相关文章

Ubuntu20.04安装Redis

目录 切换到root用户 使用 apt install redis 安装redis 修改配置文件 ​编辑 重新启动服务器 使用Redis客户端连接服务器 切换到root用户 如果没有切换到root用户的&#xff0c;切换到root用户。 使用 apt install redis 安装redis 遇到y/n直接y即可。 redis安装好之…

PyG结合MP api 实现深度学习对材料性能预测的简单案例分析

使用 PyTorch Geometric (PyG) 和 Material Project API (MP API)&#xff0c;结合深度学习技术预测材料的性能。选择预测材料的带隙&#xff08;band gap&#xff09; 作为任务&#xff0c;带隙是材料的一个关键性能&#xff0c;影响其导电性和光学性质。通过这个案例&#xf…

leetcode第39题组合总和

原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以…

基于人工智能/机器学习的SPICE建模与参数提取基准

来源 Benchmarks for SPICE Modeling and Parameter Extraction Based on AI/ML&#xff08;TED&#xff09; 摘要 在过去的几十年里&#xff0c;使用数值方法进行SPICE建模或对现有SPICE模型参数进行表征&#xff08;提取&#xff09;的提交论文数量显著增加。许多此类文章…

Centos7服务器防火墙设置教程

Centos7服务器防火墙设置教程 系统环境&#xff1a;Centos7 首先&#xff0c;确保你的系统上安装了 firewalld。通常&#xff0c;在 CentOS 7 上&#xff0c;firewalld 已经预装。如果没有安装&#xff0c;可以通过以下命令安装&#xff1a; sudo yum install firewalld 启动…

【R语言】PCA主成分分析

使用R语言手动实现PCA主成分分析计算&#xff0c;通过计算协方差矩阵计算出数据的主成分得分&#xff0c;根据的分最高的特征进行得分图的绘制 # 读取数据raw_data <- read.csv("R可视化/data.csv", header TRUE, fileEncoding "GBK")new_data <-…

Yolo11实战:基于YOLOv11的半自动化数据标注技术实践

摘要 在人工智能项目开发中,数据标注的耗时性与高成本已成为制约模型迭代效率的核心瓶颈。本文以YOLOv11的COCO预训练模型为技术基础,系统阐述半自动化标注流程的设计与实现,旨在通过**“模型推理-人工校验-迭代优化”**的闭环机制,显著提升标注效率与数据质量。 一、技术…

Spring Boot 与 MyBatis 数据库操作

一、核心原理 Spring Boot 的自动配置 通过 mybatis-spring-boot-starter 自动配置 DataSource&#xff08;连接池&#xff09;、SqlSessionFactory 和 SqlSessionTemplate。 扫描 Mapper 接口或指定包路径&#xff0c;生成动态代理实现类。 MyBatis 的核心组件 SqlSessionF…