• 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  

    分别设置点击事件

     

     

     

  • 相关阅读:
    CCF CSP认证 历年题目自练Day36
    看懂领导的这三个想法,能让领导刮目相看
    什么是CPU密集型、IO密集型?什么是多进程与线程和协程?并行与并发?
    Shell编程总结
    非对称密码体制、单钥密码体制、私钥密码体制是一个概念对吗?
    JVM原理和优化
    利用Linked SQL Server提权
    git commit 提交信息规范
    批量压缩图片软件-免费图片压缩后高清无损
    vnodeToString函数把vnode转为string(innerhtml)
  • 原文地址:https://blog.csdn.net/zhang2362167998/article/details/126701385