UMG - 15:输入键选择器。获取程序输入设置 Get Input Settings,获取输入映射事件 Get Action Mapping by Name,

(67)再学习一个新的函数,获取输入设置 :

在这里插入图片描述

++ 获取输入映射事件

在这里插入图片描述

(68)根据轴映射初始化输入键选择器

在这里插入图片描述

++ 运行效果出来了

在这里插入图片描述

(69)根据输入键选择器的新按键设置,写回到项目设置里的操作映射里

在这里插入图片描述

++经测试是好使的

在这里插入图片描述

(70)

谢谢

随着信息技术在管理上越来越深入而广泛的应用,作为学校以及一些培训机构,都在用信息化战术来部署线上学习以及线上考试,可以与线下的考试有机的结合在一起,实现基于SSM的小码创客教育教学资源库的设计与实现在技术上已成熟。本文介绍了基于SSM的小码创客教育教学资源库的设计与实现的开发全过程。通过分析企业对于基于SSM的小码创客教育教学资源库的设计与实现的需求,创建了一个计算机管理基于SSM的小码创客教育教学资源库的设计与实现的方案。文章介绍了基于SSM的小码创客教育教学资源库的设计与实现的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本基于SSM的小码创客教育教学资源库的设计与实现有管理员,校长,教师,学员四个角色。管理员可以管理校长,教师,学员等基本信息,校长角色除了校长管理之外,其他管理员可以操作的校长角色都可以操作。教师可以发布论坛,课件,视频,作业,学员可以查看和下载所有发布的信息,还可以上传作业。因而具有一定的实用性。 本站是一个B/S模式系统,采用Java的SSM框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SSM的小码创客教育教学资源库的设计与实现管理工作系统化、规范化。
<think> 我们已知在Unreal Engine中,UMG界面通常是在蓝图或C++中创建并显示的。但是,用户希望通过控制台命令直接打开某个UMG界面。在UE4中,控制台命令通常用于执行一些调试或快捷操作,而打开UMG界面并不是一个内置的控制台命令。不过,我们可以通过以下思路来实现: 1. **注册控制台命令**:我们可以创建一个控制台命令,并在该命令的执行函数中调用打开特定UMG界面的逻辑。 2. **获取玩家控制器**:在控制台命令的执行函数中,我们需要获取当前玩家控制器,因为打开UMG界面通常需要在玩家控制器所属的本地玩家上操作。 3. **创建并显示UMG界面**:通过加载UMG类,创建控件,并将其添加到视口。 由于控制台命令是在C++环境中注册的,因此我们需要在C++中实现。 ### 步骤 #### 1. 创建控制台命令 在某个模块的启动函数中(例如,在GameInstance的初始化时)注册控制台命令。 ```cpp // 在GameInstance的初始化函数中注册命令 void UMyGameInstance::Init() { Super::Init(); // 注册控制台命令 FConsoleCommandDelegate openUICmd; openUICmd.BindLambda([this]() { OpenMyUIFromConsole(); }); UGameplayStatics::GetPlayerController(this, 0)->ConsoleCommand("open_my_ui", openUICmd); } ``` 但是,上面的方法并不正确,因为`ConsoleCommand`函数是用来执行控制台命令字符串的,而不是注册命令。正确的注册方式如下: 使用`IConsoleManager`来注册命令: ```cpp #include "HAL/IConsoleManager.h" void UMyGameInstance::Init() { Super::Init(); // 注册控制台命令 IConsoleManager::Get().RegisterConsoleCommand( TEXT("open_my_ui"), TEXT("Open a specific UMG widget"), FConsoleCommandDelegate::CreateUObject(this, &UMyGameInstance::OpenMyUIFromConsole) ); } ``` #### 2. 实现打开UMG界面的函数 在`UMyGameInstance`中实现`OpenMyUIFromConsole`函数: ```cpp void UMyGameInstance::OpenMyUIFromConsole() { // 确保在客户端执行 if (GetWorld()->GetNetMode() != NM_DedicatedServer) { // 获取玩家控制器 APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0); if (PC) { // 加载UMG类(假设你已经有了一个UMG类的引用,这里使用TSubclassOf<UUserWidget>,或者通过路径加载) // 方法1:如果你已经有一个TSubclassOf变量,可以直接使用 // 方法2:动态加载 UClass* WidgetClass = StaticLoadClass(UUserWidget::StaticClass(), nullptr, TEXT("/Game/UI/MyWidget.MyWidget_C")); if (WidgetClass) { // 创建并显示 UUserWidget* MyWidget = CreateWidget<UUserWidget>(PC, WidgetClass); if (MyWidget) { MyWidget->AddToViewport(); } } } } } ``` #### 3. 注意 - 控制台命令的执行需要确保在正确的上下文中(客户端,且玩家控制器存在)。 - UMG类的路径:在内容浏览器中右点击你的UMG蓝图,选择“复制引用”,然后你会得到类似`/Game/UI/MyWidget.MyWidget_C`的路径。注意,蓝图生成的类后面会带有`_C`,表示蓝图生成的类。 - 如果你的项目是多人游戏,需要确保只在客户端执行。 ### 另一种方法:通过Exec函数 另一种方法是在玩家控制器中重写`Exec`函数,这样可以在玩家控制台中执行命令(按`~`打开的控制台)。这种方法不需要注册全局控制台命令,而是检查玩家输入的命令。 在玩家控制器中: ```cpp bool AMyPlayerController::Exec(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar) { if (FParse::Command(&Cmd, TEXT("open_my_ui"))) { // 调用打开UI的函数 OpenMyUI(); return true; } return Super::Exec(InWorld, Cmd, Ar); } ``` 然后在`OpenMyUI`函数中实现创建和显示UMG控件。 ### 总结 在UE4中,通过控制台打开UMG界面需要自定义控制台命令。我们可以通过注册控制台命令(使用`IConsoleManager`)或者在玩家控制器中重写`Exec`函数来实现。然后,在命令处理函数中加载UMG类,创建控件并添加到视口。 ### 相关问题 1. 如何在UE4中注册控制台命令? 2. 如何通过C++动态加载UMG蓝图并显示? 3. 在UE4中,控制台命令的执行权限如何控制(例如,只在客户端执行)? 4. 如何在玩家控制器中处理自定义控制台命令? </think>在Unreal Engine 4中,通过控制台命令直接打开UMG界面需要自定义C++实现。以下是实现步骤和示例代码: ### 解决方案步骤 1. **创建控制台命令** 在C++类(如`GameInstance`)中注册自定义控制台命令: ```cpp // 头文件声明 static void OpenWidgetConsoleCommand(const TArray<FString>& Args); // 源文件实现 void UYourGameInstance::OpenWidgetConsoleCommand(const TArray<FString>& Args) { if (Args.Num() > 0 && GWorld) { FString WidgetName = Args[0]; APlayerController* PC = GWorld->GetFirstPlayerController(); UYourWidgetManager::OpenWidgetByName(PC, WidgetName); // 自定义打开逻辑 } } ``` 2. **实现UMG打开逻辑** 创建辅助类管理UMG生成: ```cpp // WidgetManager.h class UYourWidgetManager : public UObject { public: UFUNCTION(BlueprintCallable) static UUserWidget* OpenWidgetByName(APlayerController* PC, FString WidgetName); }; // WidgetManager.cpp UUserWidget* UYourWidgetManager::OpenWidgetByName(APlayerController* PC, FString WidgetName) { TSubclassOf<UUserWidget> WidgetClass = LoadClass<UUserWidget>(nullptr, *WidgetName); if (WidgetClass && PC) { UUserWidget* Widget = CreateWidget<UUserWidget>(PC, WidgetClass); Widget->AddToViewport(); return Widget; } return nullptr; } ``` 3. **注册控制台命令** 在`StartupModule()`中注册命令: ```cpp void FYourModule::StartupModule() { IConsoleManager::Get().RegisterConsoleCommand( TEXT("OpenWidget"), TEXT("打开UMG界面:用法 OpenWidget WidgetClassName"), FConsoleCommandWithArgsDelegate::CreateStatic(&UYourGameInstance::OpenWidgetConsoleCommand) ); } ``` 4. **使用控制台命令** 在编辑器中按 **~** 打开控制台: ``` OpenWidget /Game/UI/MyWidget.MyWidget_C ``` ### 注意事项 1. **路径格式** 参数需使用完整引用路径(右UMG蓝图 → "Copy Reference" 获取) 2. **内存管理** 频繁开关界面需主动销毁,避免内存泄漏: ```cpp // 关闭时调用 Widget->RemoveFromParent(); Widget->ConditionalBeginDestroy(); // 立即销毁[^3] ``` 3. **输入模式** 显示UI后需设置输入模式: ```cpp PC->SetInputMode(FInputModeUIOnly()); PC->bShowMouseCursor = true; ``` ### 备选方案 若需纯蓝图方案: 1. 创建**盘快捷**绑定到蓝图事件 2. 在事件中调用 **Create Widget** 和 **Add to Viewport** 节点 3. 通过 **Execute Console Command** 节点触发 > 此实现基于UE4控制台命令扩展机制,需注意路径大小写敏感性和内存管理[^3]。实际应用时建议添加错误检查和安全引用机制。 ### 相关问题 1. 如何防止频繁开关UMG界面导致的内存泄漏? 2. 怎样在UE4控制台中查看所有已注册命令? 3. UMG界面如何响应控制台输入的参数? 4. 多玩家环境下控制台命令如何同步到所有客户端?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值