• 15c++呵呵老师【使用UMG的用户界面】


    1.在HowTo_UMG.Build.cs中 ,写如下代码

    1. using UnrealBuildTool;
    2. public class HowTo_UMG : ModuleRules
    3. {
    4. public HowTo_UMG(ReadOnlyTargetRules Target) : base(Target)
    5. {
    6. PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
    7. PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" , "UMG" });
    8. PrivateDependencyModuleNames.AddRange(new string[] { });
    9. //Uncomment if you are using Slate UI
    10. PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
    11. // Uncomment if you are using online features
    12. // PrivateDependencyModuleNames.Add("OnlineSubsystem");
    13. // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
    14. }
    15. }

    2.在HowToUMGGameMode.h中声明变量和函数

    1. #include "CoreMinimal.h"
    2. #include "GameFramework/GameModeBase.h"
    3. #include "Blueprint/UserWidget.h"
    4. #include "HowTo_UMGGameModeBase.generated.h"
    5. /**
    6. *
    7. */
    8. UCLASS()
    9. class HOWTO_UMG_API AHowTo_UMGGameModeBase : public AGameModeBase
    10. {
    11. GENERATED_BODY()
    12. public:
    13. /** 移除当前菜单控件,并在指定类(如有)中新建控件。*/
    14. UFUNCTION(BlueprintCallable, Category = "UMG Game")
    15. void ChangeMenuWidget(TSubclassOf NewWidgetClass);
    16. protected:
    17. /** 游戏开始时调用。*/
    18. virtual void BeginPlay() override;
    19. /** 游戏开始时,用作菜单的控件类。*/
    20. UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UMG Game")
    21. TSubclassOf StartingWidgetClass;
    22. /** 用作菜单的控件实例。*/
    23. UPROPERTY()
    24. UUserWidget* CurrentWidget;
    25. };

    3.在源文件中定义

    1. #include "HowTo_UMGGameModeBase.h"
    2. void AHowTo_UMGGameModeBase::BeginPlay()
    3. {
    4. Super::BeginPlay();
    5. ChangeMenuWidget(StartingWidgetClass);
    6. }
    7. void AHowTo_UMGGameModeBase::ChangeMenuWidget(TSubclassOf NewWidgetClass)
    8. {
    9. if (CurrentWidget != nullptr)
    10. {
    11. //将控件放到屏幕上
    12. CurrentWidget->RemoveFromViewport();
    13. CurrentWidget = nullptr;
    14. }
    15. if (NewWidgetClass != nullptr)
    16. {
    17. //创建控件
    18. CurrentWidget = CreateWidget(GetWorld(), NewWidgetClass);
    19. if (CurrentWidget != nullptr)
    20. {
    21. //放到屏幕上
    22. CurrentWidget->AddToViewport();
    23. }
    24. }
    25. }

    4.创建玩家控制器类HowTo_UMGPlayerController

    头文件

    1. #include "CoreMinimal.h"
    2. #include "GameFramework/PlayerController.h"
    3. #include "HowTo_UMGPlayerController.generated.h"
    4. /**
    5. *
    6. */
    7. UCLASS()
    8. class HOWTO_UMG_API AHowTo_UMGPlayerController : public APlayerController
    9. {
    10. GENERATED_BODY()
    11. public:
    12. virtual void BeginPlay() override;
    13. };

    源文件

    1. #include "HowTo_UMGPlayerController.h"
    2. void AHowTo_UMGPlayerController::BeginPlay()
    3. {
    4. Super::BeginPlay();
    5. SetInputMode(FInputModeGameAndUI());
    6. }

    ===========================

    创建ui蓝图MainMenu,加两个按钮

     并分别创建点击事件

    ===========================

    配置游戏

    1.创建游戏模式类的蓝图

     

     

    2.创建 PlayerController 的蓝图 ,命名为MenuPlayerController

    3.打开该MenuPlayerController蓝图,并设置显示光标

     

     4.编辑MenuGameMode蓝图

    5.打开场景设置,设置游戏模式蓝图

    ======================================

    构建二级UI

    1.创建ui蓝图,NewGameMenu  

    分别设置点击事件

     

     

     

  • 相关阅读:
    Spring Cloud Gateway 使用 Redis 限流使用教程
    java17 linux 环境配置
    浏览器渲染原理
    关于队里面最菜的在博客打卡第六十二天这件事
    QML地图Map中使用QPainterPath,并显示任意点经纬度位置
    GitHub下载量从19暴涨到5W,这份架构师学习路线只用了一晚
    点云从入门到精通技术详解100篇-基于三维点云的路况语义分割(续)
    码神之路项目部署(五)
    MyBatis Plus实现动态字段排序
    2022-04-03 排查问题要知识沉淀
  • 原文地址:https://blog.csdn.net/zhang2362167998/article/details/126701385