当前位置: 首页 > news >正文

虚幻C++基础 day4

虚幻中的UI

  • 虚幻中的比较常用的UI:Widget Blueprint又称UMG
  • 虚幻中的两种布局:
    • 网格布局
    • 锚布局
  • 创建Widget Blueprint
    在这里插入图片描述

网格布局

  • 有点类似Qt中的网格布局,将UI面板进行行列切分
  • Horizontal Box:水平分布
  • Vertical Box:垂直分布
  • 这里的size是采用分布制,填充满值为1,一个为0.2,一个0.8就会使两个Vertical布局分为20%,80%站位
    在这里插入图片描述
    在这里插入图片描述

锚布局

  • Canvas Panel:添加一个画布组
  • Progress Bar:进度条控件时一个简单条状物,可以进行多风格进行填充,满足不同使用需求
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

将用户创建的UI放置到主UI上

在这里插入图片描述

创建金币计数UI放置到主UI

在这里插入图片描述
在这里插入图片描述

为代码工程添加UMG模块显示到视口

  • 在GameMode中去管理UMG,在游戏开始的时候,显示主UI
  • 添加UI到模块中
    在这里插入图片描述
  • 思路:新建两个变量一个用来选择UMG类型(模版类),一个用来实例化(类指针),重写BeginPlay函数来添加UMG到视口

Level1GameMode.h

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "UEGameGameModeBase.h"
#include "Level1GameMode.generated.h"/*** */
UCLASS()
class UEGAME_API ALevel1GameMode : public AUEGameGameModeBase
{GENERATED_BODY()
public://模版类UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Widgets")TSubclassOf<class UUserWidget> MainUiclass;UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "UI Widgets")UUserWidget* MainUI;
protected:virtual void BeginPlay() override;
};

Level1GameMode.cpp

  • CreateWidget:创建Widget,头文件#include "Blueprint/UserWidget.h"
  • UGameplayStatics:UGameplayStatics是一个很实用的静态类,我们不需要拥有指向此类的任何实例的指针,并且可以直接从任何地方调用函数。头文件#include "Kismet/GameplayStatics.h"
  • MainUI = CreateWidget<UUserWidget>(UGameplayStatics::GetPlayerController(this, 0), MainUiclass);
    • UGameplayStatics::GetPlayerController(this, 0):获取角色的控制器,因为是单机只有一个玩家第二个参数就是0
  • AddToViewport:添加视口
// Fill out your copyright notice in the Description page of Project Settings.#include "Level1GameMode.h"
#include "Blueprint/UserWidget.h"
#include "Kismet/GameplayStatics.h"
void ALevel1GameMode::BeginPlay()
{if (MainUiclass){MainUI = CreateWidget<UUserWidget>(UGameplayStatics::GetPlayerController(this, 0), MainUiclass);if (MainUI){MainUI->AddToViewport();}}
}

相关文章:

  • Antd React Form.Item内部是自定义组件怎么自定义返回值
  • Terraform Chef Puppet
  • 算法导论笔记5:贪心算法
  • 【Unity】简单案例脚本实现 | 鼠标观察/键盘控制移动飞行/行走/碰撞检测
  • ZZ308 物联网应用与服务赛题第H套
  • 【Git企业开发】第六节.配置 Git和标签管理
  • 【ES专题】ElasticSearch功能详解与原理剖析
  • 灰度与二值化
  • android studio离线tips
  • 【机试题】编写一个Java函数,实现批量获取数据的功能
  • uniapp 本身就是一个坑,里面还有无数的小坑
  • odoo16前端框架源码阅读——启动、菜单、动作
  • 【Delphi】 各个平台使用 ntfy 效果说明
  • laravel8-rabbitmq消息队列-实时监听跨服务器消息
  • 使用venv 创建虚拟环境
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • C++类中的特殊成员函数
  • Git初体验
  • JavaScript 基础知识 - 入门篇(一)
  • Javascript 原型链
  • js面向对象
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Theano - 导数
  • 第2章 网络文档
  • 基于Android乐音识别(2)
  • 经典排序算法及其 Java 实现
  • 探索 JS 中的模块化
  • 我与Jetbrains的这些年
  • 一起参Ember.js讨论、问答社区。
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • (12)Linux 常见的三种进程状态
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (SpringBoot)第二章:Spring创建和使用
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (十)T检验-第一部分
  • (转)大型网站架构演变和知识体系
  • (转)原始图像数据和PDF中的图像数据
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .Mobi域名介绍
  • .net 4.0发布后不能正常显示图片问题
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net连接oracle数据库
  • @Autowired多个相同类型bean装配问题
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [20150707]外部表与rowid.txt
  • [20170713] 无法访问SQL Server
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例