您的位置:首页 > 娱乐 > 明星 > 丹东抖音seo精英_免费永久搭建论坛_泉州百度关键词优化_曼联官方发文

丹东抖音seo精英_免费永久搭建论坛_泉州百度关键词优化_曼联官方发文

2025/3/1 13:19:27 来源:https://blog.csdn.net/m0_53219246/article/details/145917386  浏览:    关键词:丹东抖音seo精英_免费永久搭建论坛_泉州百度关键词优化_曼联官方发文
丹东抖音seo精英_免费永久搭建论坛_泉州百度关键词优化_曼联官方发文

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com