一、基础UI

UMG全程叫做Unreal Motion Graphics UI Designer,是一种开发UI的工具。使用Unreal来进行UI开发,主要有两种方式,一种是Slate,另一种就是UMG,UMG是对Slate的一种包装。使用Slate进行UI开发,难度还是非常大的,需要使用C++来进行页面设计,调试非常不方便。UMG对初级开发者就非常的友好,一种所见即所得的开发模式,逻辑也可以直接使用蓝图进行编写。

虚幻引擎中分类分为两类:第一类是2DUI也就是显示在平面上的UI界面,第二类是3DUI显示在3D空间上的3D界面。

2DUI:屏幕上看到的一些文字数字等

3DUI:3D空间上的UI


两者区别:

2DUI创建方式为:creatwidget节点

3DUI的创建方式是,先创建Actor,将Widget以组件的方式加载到Actor里面

二、常用的UI空间button、image、text

第一部分:Anchors锚点可以设置控件的对其方式和锚点位置,尺寸大小等

第二部分:Appearance外观可以设置控件的图片样式,正常的样式,点击的样式,放上去的样式,点击的声音等,每个控件都有自己的样式,可以根据自己的喜好设置

第三部分:点击事件可以通过点击来实现不通的功能

三、案例

创建C++接口 interface命名为StateInterface

在C++里面写两个接口

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "StateInterface.generated.h"// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class UStateInterface : public UInterface
{GENERATED_BODY()
};/*** */
class NEWOBJECT_API IStateInterface
{GENERATED_BODY()// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:virtual void EnterState() = 0;virtual void ExitState() = 0;
};

C++创建UserWidget命名为BaseStateWidget

继承接口,重写虚函数

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "StateInterface.h"
#include "BaseStateWidget.generated.h"/*** */
UCLASS()
class NEWOBJECT_API UBaseStateWidget : public UUserWidget,public IStateInterface
{GENERATED_BODY()public:virtual void EnterState() override;virtual void ExitState() override;UFUNCTION(BlueprintNativeEvent,BlueprintCallable,Category = "State Pattern")void OnEnterState();UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "State Pattern")void OnExitState();
};
// Fill out your copyright notice in the Description page of Project Settings.#include "BaseStateWidget.h"void UBaseStateWidget::EnterState()
{OnEnterState();
}void UBaseStateWidget::ExitState()
{OnExitState();
}void UBaseStateWidget::OnEnterState_Implementation()
{AddToViewport();
}void UBaseStateWidget::OnExitState_Implementation()
{RemoveFromParent();
}

C++创建Actor命名为UIStateManager

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BaseStateWidget.h"
#include "Kismet/GameplayStatics.h"
#include "UIStateManager.generated.h"UCLASS()
class NEWOBJECT_API AUIStateManager : public AActor
{GENERATED_BODY()public:    // Sets default values for this actor's propertiesAUIStateManager();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:  // Called every framevirtual void Tick(float DeltaTime) override;UFUNCTION(BlueprintCallable, Category = "State Pattern")void EnterState(TSubclassOf<UBaseStateWidget> StateWidgetClass);UFUNCTION(BlueprintCallable, Category = "State Pattern")void ExitAllState();UPROPERTY(BlueprintReadWrite,Category = "State Pattern")UBaseStateWidget* CurrentStateWidget;private:TMap<TSubclassOf<UBaseStateWidget>,UBaseStateWidget*> WidgetIntsance;
};
// Fill out your copyright notice in the Description page of Project Settings.#include "UIStateManager.h"// Sets default values
AUIStateManager::AUIStateManager()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;}// Called when the game starts or when spawned
void AUIStateManager::BeginPlay()
{Super::BeginPlay();}// Called every frame
void AUIStateManager::Tick(float DeltaTime)
{Super::Tick(DeltaTime);}void AUIStateManager::EnterState(TSubclassOf<UBaseStateWidget> StateWidgetClass)
{if (CurrentStateWidget != nullptr){CurrentStateWidget->ExitState();}if (WidgetIntsance.Contains(StateWidgetClass)){CurrentStateWidget = WidgetIntsance.FindRef(StateWidgetClass);}else{APlayerController* PC = UGameplayStatics::GetPlayerController(GetWorld(),0);CurrentStateWidget = CreateWidget<UBaseStateWidget>(PC,StateWidgetClass);WidgetIntsance.Add(StateWidgetClass,CurrentStateWidget);}CurrentStateWidget->EnterState();
}void AUIStateManager::ExitAllState()
{for (auto& Elem:WidgetIntsance){(Elem.Value)->ExitState();}
}

创建UMG继承自刚刚创建的BaseStateWidget

样式你可以自己设计

创建蓝图

打开

UE4 C++ UMG框架搭建相关推荐

  1. java 详解 搭建 框架_maven 基本框架搭建详解

    在平时的开发中还是在写blog时,在项目实例开始都会需要一遍一遍的介绍maven框架搭建,重复性的工作让我觉得烦恼,现在展现一下Java的核心思想"重复利用",将这个重复性的描述提 ...

  2. gvgai框架搭建及controller编写

    gvgai框架搭建及controller编写 gvgai框架搭建 controller编写 gvgai框架搭建 gvgai官网:http://www.gvgai.net/ 框架下载:http://ww ...

  3. [转载]SSH框架搭建详细图文教程

    什么是SSH? SSH对应 struts spring hibernatestruts 采用MVC模式,主要是作用于用户交互spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合hiber ...

  4. spring mvc + mybatis 框架搭建 ( idea + gradle)

    spring mvc + mybatis 框架搭建 idea + gradle 刚刚入门,只是个人见解,如有错误或者问题欢迎指出指正. 邮箱: [ wgh0807@qq.com ] 文章引用: [ap ...

  5. Angular开发实践(一):环境准备及框架搭建

    引言 在工作中引入Angular框架将近一年了,在这一年中不断的踩坑和填坑,当然也学习和积累了很多的知识,包括MVVM框架.前后端分离.前端工程化.SPA优化等等.因此想通过Angular开发实践这系 ...

  6. SSH框架搭建问题总结

    1.eclipse中tomcat配置是否正确?能否在网页中访问的到? 如何在eclipse中配置tomcat就不说了,我们看下问题,在网页上访问tomcat的地址,为什么出现404错误呢? 解决办法: ...

  7. React-Native 之 GD (一)目录结构与第三方框架使用与主题框架搭建

    1.APP效果图 2.工程环境配置 IOS: 将压缩包内的 Images.xcassets 文件夹直接替换掉我们iOS工程中的 Images.xcassets 文件夹. 这时候我们可以看到所有图片资源 ...

  8. (三) Angular2项目框架搭建心得

    前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...

  9. Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节

    上篇文章使用SafeObjectPool实现了一个简单的Msg类.代码如下: class Msg : IPoolAble,IPoolType{#region IPoolAble 实现public vo ...

  10. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】

    基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...

最新文章

  1. R语言ggplot2包和lattice包可视化改变x轴和y轴的显示位置实战
  2. AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable
  3. Overview of the New C++:C++0x
  4. 度盘转存工具 v1.8
  5. pptx字体类的相关方法
  6. @程序员,一文掌握 Web 应用中的图片优化技巧!
  7. 人生若如初见,又当如何?
  8. 简单的print函数的实现
  9. Netflix:如何打造开放协作的实时 ETL 平台?
  10. linux攻防比赛_LINUX 遭到SYN FLOOD攻击 LINUX下SYN攻防战
  11. 自己写代码解析工具的注意事项
  12. Testing Flutter apps翻译-使用 Mockito 模拟依赖项
  13. H5游戏开发:FC小蜜蜂
  14. dwg格式转换成html,DWG格式转换器BitRecover DWG Converter Wizard
  15. 滑模鲁棒控制(hm-3)
  16. 用SPSS搞定问卷调查中的决断值
  17. Win11本地安全策略怎么设置?
  18. ios、iphone越狱获取系统文件权限
  19. tomcat5下get请求中文乱码
  20. 压缩图片的三种方式(Java)

热门文章

  1. Stratified Transformer复现和调试记录,ubuntu20复现S3DIS数据集(点云语义分割)
  2. 自建speedtest测速服务器教程,Linux/Windows/群晖
  3. oracle 12c 死锁 处理,oracle - PLSQL Oracle 12c死锁,为什么需要对SSX Table锁进行独立删除? - 堆栈内存溢出...
  4. Android 清理大师产品的具体实现(一)QQ专清
  5. C:\WINDOWS\system32\config\systemprofile\Desktop引用了一个不可用的位置
  6. 数据集成之数据整合(Data Consolidation)
  7. oracle热备检查,oracle 手动热备
  8. Spring Boot电商项目46:购物车模块四:【添加商品到购物车】接口;(如果:接口要求返回JSON格式,而接口没有做相应的设置,是会报404错误的)
  9. 什么是熔断? 熔断有哪几种状态 ?断路器的工作原理
  10. Android keeps stopping