首页 > 其他分享 >learn-ue-ui

learn-ue-ui

时间:2023-10-25 12:55:05浏览次数:39  
标签:HUD widget Text button UI learn ue ui 血槽

learn ue ui

Created: 2023-10-24T15:29+08:00
Published: 2023-10-25T12:47+08:00

目录

Intro

User Interface Development - Unreal Engine 4 Course - YouTube

  1. Intro
  2. Editor
    1. Palette
    2. Hierarchy
    3. Animations
    4. Details
    5. Switch between Designer and Graph
  3. Place Object
    1. Anchor
    2. Z Order
    3. Image > appearance > brush: 更换背景图片
  4. import UI assets
    1. 拖入图片到 Drawer
    2. image widget 可以修改尺寸和 brush 中选择的图片大小一致或成比例
    3. 使用 PNG 格式文件
  5. Display UI:
    1. 在 Level Blueprint 中,EventBeginPlay > CreateWidget > AddToViewport,但是如果有很多关卡,要如何处理呢?
    2. 在 GameMode 中的 HUD class 中找到已经被选中的 HUD Class(或者自己直接新建一个 HUD Class),在其 Blueprint 内,重复第一步 AddToViewport,那么每一关都显示
    3. 总结,两种方法:对于血条等信息,可以每一关都显示,就放到 HUD 中,对于 MainMenu 可以只在一个 LevelBlueprint 中放置
  6. Button&States:
    1. 需求:要鼠标 hover 到 button 上 button 变色
    2. place a button, then style > hovered,pressed 只表示按压下去那一瞬间的显示,release 后又回来了
  7. Button Events: 在 Graph 中事件触发后直接调用函数,比较 easy
    1. OnHovered -> PlaySound2D
    2. OnClicked -> PrintString
  8. Showing Cursor & Input Modes:在 UI 的 Graph 中控制
    1. 让 Cursor 一直显示这样就可以点 UI:PlayerController.SetShowMouseCursor
    2. 只显示鼠标还不够,因为 Pawn 还是可以响应 Input,解决方法是:PlayerController.SetInputModeUIOnly,并且设置 InWidgetToFocus 为 self
    3. 在处理完 UI 后,需要重新让 Pawn 之类响应输入,就是 SetInputModeGameOnly img
  9. Loading Level From UI:点击 Start 后开启新的关卡,并且销毁该 UI
    1. 创建一个 MenuLevel,在 Button clicked 事件后调用 OpenLevel 并选择指定的 level 即可。
      但是需要注意,在 MenuLevel 中可能已经设置了 InputModeUIOnly,在 UI 中 OpenLevel 后,需要 set InputModeGameOnly
    2. 如果 Load 的事件很长,可以在 OpenLevel 后 RemoveFromParent,将 UI 从视口中移除 img
  10. Organizing With Panels & Boxes: 将多个 button 对其
    1. 如果在 HTML 中,就是 div 套 div,对于 UMG,使用的 widget 为 Box,这里我们用 vertical box,让 button 作为 box 的子节点
    2. 对其在 button > Details > Slot 中可以修改对齐方式,HorizontalBox 只能修改 Vertical Alignment,VerticalBox 只能修改 Horizontal Alignment
    3. 左右箭头是交换它和相邻组件的位置,比如有两个 button 就是交换他们的位置
    4. 在我猜测,Fill 就是占据尽可能多的空间,但是自己不一定填满所有空间,再通过 Alignment 调整自己占据空间 img
  11. UI Animations Intro: 动画的本质就是一个 Object 的属性随着时间变化,比如字体的 Opacity 随着时间变化 img
    1. 创建一个字体 widget,给它起一个名字,比如叫做 Text_Version
    2. Window > Animations > +Animation,给自己的动画起一个名字,比如 VersionTextFade
    3. 在 Animation 中添加 track,选择 Text_Version,再对这个 widget + track,选择要改变的属性
    4. add a new keyframe:
      1. 方法一:drag the grid, change the value
      2. 方法二:直接点击小加号
    5. move grid to keyframe: 点击对应属性的左右小箭头
    6. del a keyframe: 点击 interval 内的小圆点,右键删除
  12. Play Animations: 在 Widget 的蓝图中使用 PlayAnimation 函数 img
  13. Text Content Bindings: 比如界面上需要一直显示 Character 的血量
    1. Text > Details > Content > Create Bindings,就创建了一个函数
    2. 函数内部获取 Player 的 HP 转为 Return Value img
    3. 因为该 Widget 控制着 Character,所以在 Character 的 Blueprint 里 EventBegin 创建该 Widget 并 AddToViewport img
  14. Progress Bar Content Binding: 使用进度条显示角色的血量,原理是一张 empty 血槽图片做底,一张满血槽图片配合 percentage 挡在前面
    1. 当 percentage 为 0 时,满血槽不显示,当 percentage 为 60% 时候,显示满血槽图片的 60% 挡在 empty 血槽前面
    2. 为 Percentage create a binding,原理和显示血量一样
  15. Pause Game: 按下 Button 暂停游戏:OnClicked -> Set Pause Game img
  16. Exit game: 在 clicked event 后 ExecuteConsoleCommand,为 Exit
  17. Switching Between Widgets: 如何删除 widget:RemoveFromParent
  18. Graphics Scalability Settings: 改变游戏分辨率:ExecuteConsoleCommand r.screenPercentage 10 之类的,
    可以看 Scalability Reference for Unreal Engine | Unreal Engine 5.3 Documentation,也可以在运行的时候按 ~,调出 cmd 输入命令运行看看结果

Widgets

Text Box(Multi-Line)

字体颜色不改变的原因是因为勾选了 Inherit From Parent

标签:HUD,widget,Text,button,UI,learn,ue,ui,血槽
From: https://www.cnblogs.com/ticlab/p/17786909.html

相关文章

  • linux中执行uefi runtime service call的内存上下文切换
    当linuxkernel从UEFI启动之后尽管bootservice退出了但是仍然可以使用runtimeservice。这就引发了一个问题:存在于uefi内存空间的code如何被kernel调用。首先找一个调用efiruntimeservice的例子:staticvoidefi_call_rts(structwork_struct*work){...switch(e......
  • vue中如何使用svg,以及碰到的相应问题
    安装cnpminstallsvg-sprite-loader--save-dev创建svg文件夹存放svg图标创建icons文件夹,在icons文件夹下创建svg文件夹存放本地svg图标。vue.config.js中配置svg图片config.module.rule("svg").exclude.add(resolve("src/icons")).end();config.module.rule......
  • vue3 elementplus table表格内添加checkbox和行号
    1.仅添加复选框<el-table-columntype="selection"width="55"></el-table-column>2.添加复选框和文字行号在一列<el-table-column><template#header><el-checkboxv-model="selectAll"@change="han......
  • vue 首次加载项目,控制台报错: Redirected when going from "/" to "/login"
    第一次加载加载页面时报错如下:Redirectedwhengoingfrom"/"to"/login"viaanavigationguard. ![image](https://img2023.cnblogs.com/blog/1880163/202310/1880163-20231025113840444-1010075971.png)后续在地址栏直接添加/login,index,错误页面等均正常无报错.路由......
  • Java图片压缩遇到 "No suitable ImageReader found for source data."
     问题:使用压缩工具的时候突然遇到图片压缩失败的情况。此时检查一下要上传的图片是否正常。处理方式:检查图片数据是否异常,一个图片五六兆。图片虽然是JPG结尾的,但是不在“ ImageIO”类的支持范围内。例如 WebP图片虽然可以以JPG格式结尾,但是 “ ImageIO”类......
  • Jenkins配置java和vue构建环境
    jdk,maven,node,localtime等配置可通过挂载的方式进行配置前提条件是虚拟机中已配置好jdk,maven,node等环境注意自己虚拟机相关环境配置的路径以下样例为我自己的虚拟机中的配置路径-v宿主机(虚拟机)路径:容器路径dockerrun--namejenkins-p28081:8080-p50000:50000-v/v......
  • vue3 动态加载组件
    <el-dropdownstyle="margin:0px"><el-buttontype="primary">视图</el-button><template#dropdown><el-dropdown-menu><el-dropdown-itemv-for="dropItemindropI......
  • Java双端队列Deque简述
    概述​ Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。​ Deque是一个线性collection,支持在两端插入和移除元素。名称deque是“doubleendedqueue(双端队列)”的缩写,通常读为“deck”。大多数......
  • js中使用css变量(vue)
    html<divclass="test":style="{'--backgroundColor':backgroundColor}"></div>jscss .test{background-color:var(--backgroundColor);} ......
  • 微信小程序--3.request.ts文件封装
    3.request.ts文件封装api.tsimportrequestfrom'./request'//获取tokenexportfunctioninit(data:object){returnrequest({url:'/api/wechat_mini/auth/wx_init',data})}request.tsconstapp=getApp();//提示语方法functio......