虚幻引擎学习笔记——Month1 Week3

Day1

上周简单总结
  • 创建基础数据类型变量,如布尔、浮点、整型等,系统会自动加默认值。而自己创建的变量系统不会赋默认值,为防止变量为空所带来的问题,需要自己对其赋值
  • 对象类型的变量:既可以存该对象本身,也可以存该对象的子类

虚幻引擎之 “UI”

  • ZOrder(层级):越先进UI的组件,层级越靠下。即,先进UI的先渲染,后进UI后渲染。后渲染的会盖在先渲染的组件上面

  • ZOrder(层级)指数高的会盖在ZOrder指数低的组件上虚幻引擎学习笔记——Month1 Week3_第1张图片

  • UI组件,外观的Image部分,既可以放图片,也可以放材质球
    虚幻引擎学习笔记——Month1 Week3_第2张图片

  • 中文会自动换行,英文每个单词间要加空格,满一行后系统才会自动换行
    虚幻引擎学习笔记——Month1 Week3_第3张图片

  • 关于需要操控UI界面时,鼠标的显示问题:
    (虚幻引擎提供的需要鼠标操控UI的解决方案:在Controller的类默认值勾选了“显示鼠标光标”后,此时WSAD键正常控制角色移动,鼠标初始状态只能操作UI,无法实现“抬头、扭头”,但当在非UI界面的空白处单击一下后,即可实现“抬头、扭头”)

  • 未在Controller的类默认值勾选了“显示鼠标光标”时,按下Shift+F1,即可显示鼠标

虚幻引擎学习笔记——Month1 Week3_第4张图片
在这里插入图片描述

  1. 想要把纹理用在UI上,对单个材质进行如下操作:
    虚幻引擎学习笔记——Month1 Week3_第5张图片
    当有需要对大量材质进行操作时,可采用如下批量处理方式:
    虚幻引擎学习笔记——Month1 Week3_第6张图片
    虚幻引擎学习笔记——Month1 Week3_第7张图片

  2. 如果想要给按钮添加更多的效果,不只是一个材质球的话,这时候就需要用到材质球了(想给UI做点特效,只能通过材质球)
    虚幻引擎学习笔记——Month1 Week3_第8张图片
    虚幻引擎学习笔记——Month1 Week3_第9张图片
    虚幻引擎学习笔记——Month1 Week3_第10张图片
    虚幻引擎学习笔记——Month1 Week3_第11张图片

  3. 了解一种特殊的贴图:
    虚幻引擎学习笔记——Month1 Week3_第12张图片

UI按钮事件:
  1. On Clicked(点击事件):触发 “当鼠标在按钮上按下并在该按钮上松开的一瞬间”(常作“后悔键”,因为想要取消时直接移开鼠标再松开按键即可)
  2. On Pressed(按下事件):触发 “当鼠标在按钮上按下的一瞬间”
  3. On Released(松开事件):触发 “当鼠标按下后松开的一瞬间”
  4. On Hovered(进入事件):触发“当鼠标进入按钮的一瞬间”
  5. On Unhovered(离开事件):触发“当鼠标离开按钮的一瞬间”
    (On Clicked常用来做功能、On Pressed与On Released常用来做效果)
实现按下按钮 “弹出/收回菜单” 功能

虚幻引擎学习笔记——Month1 Week3_第13张图片
虚幻引擎学习笔记——Month1 Week3_第14张图片
将按钮的初始化状态设为隐藏:
虚幻引擎学习笔记——Month1 Week3_第15张图片
设置按下按钮实现 “打开/关闭菜单” 功能
虚幻引擎学习笔记——Month1 Week3_第16张图片
判断当前动画是否播放完毕,播放完毕后才允许下一次播放:
虚幻引擎学习笔记——Month1 Week3_第17张图片

  • 添加人物 “在客厅与卧室之间进行瞬移” 的功能

虚幻引擎学习笔记——Month1 Week3_第18张图片
虚幻引擎学习笔记——Month1 Week3_第19张图片
书写 “瞬移” 功能的蓝图:

虚幻引擎学习笔记——Month1 Week3_第20张图片
对 “瞬移” 功能进行优化,增加 “淡入淡出” 的转场效果:
虚幻引擎学习笔记——Month1 Week3_第21张图片



Day2

有关项目打包:
  1. 打包前先将默认地图设置好
  2. 进行烘焙,检查日志是否报错。且烘焙后打包速度会变快。
    虚幻引擎学习笔记——Month1 Week3_第22张图片

根据移入蓝图设置“瞬移点”+“瞬移朝向”的设置:

  1. 首先创建一个“BP_Point”蓝图类,该类实例化出来的对象用于存储按下相应按钮后要到达的位置信息。为了区分该类实例化出来的不同对象,在该类下创建变量,用于区分及后续的相应信息处理。
    虚幻引擎学习笔记——Month1 Week3_第23张图片

  2. 用自定义事件将 “瞬移” 功能进行封装,不同按钮直接调用该事件即可。
    虚幻引擎学习笔记——Month1 Week3_第24张图片

  3. 在程序一开始的时候就先把所有的“传送点”搜索到,放在一个数组中,方便后面的调用
    虚幻引擎学习笔记——Month1 Week3_第25张图片

补充:数组(Array容器)
  • Array容器:又称 “数组”,是一种可以自动变化大小的容器,容器内只能存储同一类型的数据(即,“同质容器”)
  • 数组在获取数据时有两种方式:复制——Get(a copy)、引用——Get(ref)。常用“复制”的方式,它是将容器中的对象进行了复制操作,在外部修改不会影像容器内的数据。而引用则是在外部修改数据会影响到容器内的数据内容。
补充:遍历Array
  1. 遍历是指按照给定的规则,将容器内的元素进行逐一获取的过程。
  2. 在蓝图中遍历容器的方式有两种:
    • 直接使用ForLoop,自己通过下标获取
    • 使用便捷语法节点ForeachLoop进行快速遍历

  1. 根据蓝图传送点的位置进行匹配传送虚幻引擎学习笔记——Month1 Week3_第26张图片
    (为了防止Delay等函数对传送造成意外干扰,先将传送位置存在一个变量中,再在Delay等函数执行完成后,将该变量中的位置信息给到Player)
    虚幻引擎学习笔记——Month1 Week3_第27张图片
  2. 设置瞬移后Player的朝向
    (与其他蓝图可以直接SetActorRotation不同,玩家角色蓝图的朝向由控制器来控制,即,由鼠标、键盘来控制。因此直接对Player执行旋转命令,即SetActorRotation对Player不生效。需要对控制器Controller执行SetActorRotation才生效)
    虚幻引擎学习笔记——Month1 Week3_第28张图片

“进度条”制作

  1. 添加进度条“ProcessBar”,并根据瞬移时长设置动画
    虚幻引擎学习笔记——Month1 Week3_第29张图片

  2. 设置进度条初始状态为 “隐藏”
    虚幻引擎学习笔记——Month1 Week3_第30张图片

  3. 设置相应按键匹配相应传送点信息后,进度条才可见
    虚幻引擎学习笔记——Month1 Week3_第31张图片

  4. 设置 “瞬移” 结束后,进度条消失
    虚幻引擎学习笔记——Month1 Week3_第32张图片

  5. 按键信息与传送点信息匹配后,播放进度条动画
    虚幻引擎学习笔记——Month1 Week3_第33张图片

“小地图”制作

  1. 准备工作
    虚幻引擎学习笔记——Month1 Week3_第34张图片
    在PS中进行图片处理,转为PNG或TGA格式,尺寸尽量是正方形。
    将处理好的图片导入UE中的UI文件夹下的Texture文件夹中,命名“T_MiniMap”。
    新建一个UI控件。实际工作中,我们将每一个UI的功能制作成一个UI控件,最后再将其嵌套组合起来。

    创建父层,更改大小为:256*256,并将MiniMap赋予Image:
    虚幻引擎学习笔记——Month1 Week3_第35张图片
  2. 在场景的左上角找一个点,以它为原点,与小地图进行比例匹配计算。从而实现位置的实时更新。
    虚幻引擎学习笔记——Month1 Week3_第36张图片
  3. 设置玩家在小地图上朝向。(因为场景中的二维X正方向向上,UI中的二维X方向向右,因此需要在Z轴上旋转90°才能使玩家在场景中的朝向与在UI中的朝向一致)
    虚幻引擎学习笔记——Month1 Week3_第37张图片
    虚幻引擎学习笔记——Month1 Week3_第38张图片

Day3

实现当Player进入碰撞体时,点击模型显示按钮

上午课堂讲解:

  1. 新建一个按钮UI蓝图

  1. 在UI_Button中单独制作一个按钮
    虚幻引擎学习笔记——Month1 Week3_第39张图片
  2. 搭建UI_MainUI存放按钮的 “水平框” 框架,并将按钮添加进去
    虚幻引擎学习笔记——Month1 Week3_第40张图片
  3. 优化蓝图结构,将Playe进入碰撞体后,要对MainUI进行操作前的准备工作封装到一个 “MainUI” 函数中
    虚幻引擎学习笔记——Month1 Week3_第41张图片
  4. Player进入碰撞体时,“在UI_MainUI上创建按钮” 函数:
    虚幻引擎学习笔记——Month1 Week3_第42张图片
  5. Player离开碰撞体时,“在UI_MainUI上移除已创建按钮” 函数:
    虚幻引擎学习笔记——Month1 Week3_第43张图片
  6. 调用MainUI函数,将其勾选为 “纯函数”,并在其后连接 “Player进入碰撞体时在屏幕上创建按钮”,“Player离开碰撞体时将屏幕上的按钮删除”
    虚幻引擎学习笔记——Month1 Week3_第44张图片



下午课堂讲解:

  1. 在玩家控制器(BP_PlayerController)中进行设置,激活游戏运行状态下鼠标的点击
    虚幻引擎学习笔记——Month1 Week3_第45张图片

  2. 设置当Player进入碰撞体内,且鼠标点击到Actor蓝图或其子类蓝图时,鼠标点击才生效,即,Player在碰撞体内点击模型,才在MainUI界面上创建按钮UI:
    虚幻引擎学习笔记——Month1 Week3_第46张图片

  3. 增加“是否已创建按钮?(IsCreateButton)”变量,防止重复在MainUI界面上创建按钮
    虚幻引擎学习笔记——Month1 Week3_第47张图片
    虚幻引擎学习笔记——Month1 Week3_第48张图片

  4. 因为按钮具有多项属性,所以采用结构体变量控制它。首先进行结构体的创建和其变量的创建:

    虚幻引擎学习笔记——Month1 Week3_第49张图片

  5. 因为“按钮”是为“Actor对象”服务的(当点击Actor对象时,在MainUI界面上添加按钮),所以在父类BP_BaseActor蓝图中进行声明,即,创建结构体变量
    虚幻引擎学习笔记——Month1 Week3_第50张图片

  6. 在CreateButtonUI函数身上添加一个输入口,用于接收Actor需要创建几个按钮,方便Actor将自身信息传给该函数

虚幻引擎学习笔记——Month1 Week3_第51张图片


设置当Player进入对象蓝图的碰撞体,且鼠标点击对象蓝图模型时,在MainUI界面上创建按钮UI。当Player离开碰撞体时MainUI界面自动删除按钮UI:

虚幻引擎学习笔记——Month1 Week3_第52张图片虚幻引擎学习笔记——Month1 Week3_第53张图片


  1. 以此为需要添加按钮的蓝图对象增加结构体数组元素,每个蓝图对象需要几个按钮,就在此其结构体中添加几个数组。这些信息会随着self传到CreateButtonUI的BaseActor输入口中
    虚幻引擎学习笔记——Month1 Week3_第54张图片

  2. 对按钮进行icon设置
    虚幻引擎学习笔记——Month1 Week3_第55张图片
    虚幻引擎学习笔记——Month1 Week3_第56张图片

  3. 为按钮设置icon图标——完善复杂版:
    虚幻引擎学习笔记——Month1 Week3_第57张图片
    虚幻引擎学习笔记——Month1 Week3_第58张图片

  4. 为按钮设置icon图标——简洁版:
    先将按钮的normal状态下设置为透明状态
    虚幻引擎学习笔记——Month1 Week3_第59张图片
    虚幻引擎学习笔记——Month1 Week3_第60张图片
    虚幻引擎学习笔记——Month1 Week3_第61张图片

  5. 将按钮的icon图标设置为圆形,并为其添加动态材质,并根据对象蓝图的信息设置动态材质的图标:(动态材质:可以动态调整的材质。即,程序运行时可以实时修改的材质。创建动态材质时需要先创建一个材质球,然后将需要修改的地方右键转为参数。)
    虚幻引擎学习笔记——Month1 Week3_第62张图片
    虚幻引擎学习笔记——Month1 Week3_第63张图片
    虚幻引擎学习笔记——Month1 Week3_第64张图片



Day4

点击按钮,可以实现相对应的功能:
  1. 设置当按下按钮时,调用接口
    虚幻引擎学习笔记——Month1 Week3_第65张图片
  2. 按下 “花瓶/装饰品” 按钮时,实现模型切换
    虚幻引擎学习笔记——Month1 Week3_第66张图片
  3. 按下 “Open / Close” 按钮时,实现开关门
    虚幻引擎学习笔记——Month1 Week3_第67张图片

  4. 为电视设置媒体 “播放/关闭/暂停/下一集”
    因为涉及播放 “下一集”,所以要在Movies文件夹下创建“媒体播放列表”
    此时将OpenSource节点更换为OpenPlaylist,因为前者只能打开一个文件
    虚幻引擎学习笔记——Month1 Week3_第68张图片

  5. 按下相框图片的按钮,更换为指定的图像
    虚幻引擎学习笔记——Month1 Week3_第69张图片
    虚幻引擎学习笔记——Month1 Week3_第70张图片


优化UI的生成方式

(原为:Player进入相应碰撞体时点击蓝图模型,将其对应的按钮UI创建出来,当Player离开碰撞体时,将按钮UI删除。该方式对计算机消耗较大。)
(改为:游戏开始时创建出来指定数量(8个)的按钮UI,并令其初始化状态为全部隐藏。当Player进入碰撞体并点击对象模型时,根据对象模型需要的按钮个数,将隐藏8个按钮进行指定个数的按钮的显示,当离开碰撞体时令按钮隐藏)

  1. 在主UI蓝图(UI_MainUI)中设置:仅在游戏开始时,创建一次指定上限个数(8个)的按钮UI,并令这八个按钮的初始化状态为隐藏
    虚幻引擎学习笔记——Month1 Week3_第71张图片

  2. 创建 “按钮UI显示/隐藏 函数”
    虚幻引擎学习笔记——Month1 Week3_第72张图片
    虚幻引擎学习笔记——Month1 Week3_第73张图片

  3. 断开UI_Button中的节点连接
    虚幻引擎学习笔记——Month1 Week3_第74张图片

  4. 在BP_BaseActor, 调用 “显示/隐藏 函数”虚幻引擎学习笔记——Month1 Week3_第75张图片

  5. 让按钮按照在Actor对象中设置的“按钮结构体”样式,进行显示
    虚幻引擎学习笔记——Month1 Week3_第76张图片
    虚幻引擎学习笔记——Month1 Week3_第77张图片
    虚幻引擎学习笔记——Month1 Week3_第78张图片



优化按钮的显示——被点击的按钮“亮”,未被点击的按钮“暗”

  1. 首先实现点哪个按钮,哪个按钮亮起来
    虚幻引擎学习笔记——Month1 Week3_第79张图片
    虚幻引擎学习笔记——Month1 Week3_第80张图片

  2. 为Actor对象匹配默认状态下对应的 “亮按钮”
    虚幻引擎学习笔记——Month1 Week3_第81张图片
    虚幻引擎学习笔记——Month1 Week3_第82张图片

  3. 将默认“亮按钮”点亮,其他按钮为“暗”
    虚幻引擎学习笔记——Month1 Week3_第83张图片

  4. 将按钮的“亮”状态进行保存,当Player离开碰撞体,下一次再回来时“亮按钮状态”为上一次离开时操作状态,且与模型相匹配。
    虚幻引擎学习笔记——Month1 Week3_第84张图片





Day5

关卡序列

  1. 相机拍摄场景:
    虚幻引擎学习笔记——Month1 Week3_第85张图片
    虚幻引擎学习笔记——Month1 Week3_第86张图片

  1. 用蓝图控制关卡序列播放时UI界面不可见,序列播放完毕后UI出现
    虚幻引擎学习笔记——Month1 Week3_第87张图片
    虚幻引擎学习笔记——Month1 Week3_第88张图片

  • 使用Sequencer的事件触发器控制序列播放时电视的开关
    虚幻引擎学习笔记——Month1 Week3_第89张图片
    虚幻引擎学习笔记——Month1 Week3_第90张图片
    虚幻引擎学习笔记——Month1 Week3_第91张图片
    虚幻引擎学习笔记——Month1 Week3_第92张图片

  • 镜头的运用最好不要一镜到底,且每一个镜头的方向最好不同(eg.从左到右、从前到后)
  • 在渐变轨道中:1是黑场,0是透明
  • 事件的触发器就是关卡序列(Sequencer)的内置蓝图
  • 一般不会导出 .avi 格式的视频,因为文件大小太大了

你可能感兴趣的:(虚幻,学习,ue4)