资源
课程
【UI】01 课:显示图片到屏幕上
创建一个 Widget Blueprint
类。
跟 Unity 里的 UI 系统好像……拖一张图调一调参数。
打开关卡蓝图。
节点里选择所创建的 Widget Blueprint
。
Add to Viewport
节点即可显示 UI。
Add to Viewport
和 Add to Player Screen
在这里起同样的效果,仅在多人游戏时才会有区别。
【UI】02 课:UI 主菜单制作
创建一个 Pawn
。
往这个 Pawn
里塞一个 Camera
。
调整第三人称游戏场景,将 Player 0
交给这个摄像机。
创建一个 Widget Blueprint
类,设置一个 Vertical Box
,里面放上三个按钮,设为 Fill
,然后一阵操作。
此时就可以把按钮的事件整进 Widget Blueprint
类开始写按下按钮时的逻辑了。Get All Actor Of Class
蓝图通信一波,最后将控制权交给小白人。
退出游戏的逻辑。
【选看】03 课:使用多格式文本块
创建一个 Widget Blueprint
类。
创建一个 Data Table
。
类别选择 RichTextStyleRow
。
给这个 Data Table
加两行。操作一下这两行对应的文字属性。第一行名称最好是 Default
。
设置字体时可以打开 Show Engine Content
以获取可用的字体。
Widget Blueprint
中创建一个 RichTextBlock
,Text Style Set
选择创建的 Data Table
,Text
里设置为:
1 |
|
【UI】04 课:UI 动画和暂停游戏
创建一个 Widget Blueprint
类 Pause
,绘制好 UI。
随便找一个蓝图(角色蓝图/关卡蓝图/自己建的蓝图,只要能接受输入就行),放上按下 Q
显示这个 UI 的逻辑。
WorldSettings
里创建一个新的 GameMode
以显示鼠标。
WorldSettings
里创建一个新的 PlayerController
以显示鼠标。
PlayerController
里将 Enable Click Events
打开。此时即可正确处理 UI。
接下来实现 UI 动画。左下角创建一个动画 Appear
,之后类似 Pr 的方式设置 UI 的关键帧动画。
UI 蓝图里自定义事件 BeginAnim
,触发这个事件时播放动画 Appear
。
按下确认按钮时退出游戏。
按下继续游戏按钮时反方向播放动画,隐藏 UI。
修改角色蓝图中按下 Q
显示 UI 的逻辑。
【UI】05 课:3D UI 的交互和显示
创建一个 Widget Blueprint
,绘制好 UI,两个 Button
一个半透明 Border
。
新建一个 Actor
蓝图,设置 Widget Class
。里面添加 Widget
节点,Rendering
下的 Blend Mode
选择 Transparent
。
User Interface
大小设与 UI 的大小一致。
在第一人称人物中,给枪下面安装节点 WidgetInteraction
,调整 Transform
,可以打开 Show Debug
以便于调试。
此时 WidgetInteraction
检测到 UI 对象就会显示红点。
编辑人物蓝图。
- 新建一个 bool 类型变量
IsFullyAutomatic
,用于控制射击方式是全自动/半自动。 - 定义一个自定义事件
FullyAutomatic_Event
,用于蓝图通信以设置IsFullyAutomatic
。 - 定义一个自定义事件
EnableFullyAutomatic_Event
,执行这个事件会开火,通过Set Timer by Function Name
来实现全自动开火,Clear Timer by Function Name
来实现停止开火。 Press Pointer Key
和Release Pointer Key
,来实现Widget Interaction
获取到 UI 时鼠标点击事件。
设置 UI 的蓝图,按下按钮时设置事件。
要想纯用鼠标控制 3D UI,先自定义一个 PlayerController
,应用之并将 EnableClickEvents
给我关了。
编辑这个 PlayerController
的蓝图,如此绘制之,并将 Interaction Source
设为 Mouse
。
新建一个 pawn
类,里面添上 camera
并获取控制权,运行关卡,此时 3D UI 可以正确运行。
选看
【选看】多个界面切换和局域网联机
创建三个 Widget Blueprint
:
FindServer
查找服务器 UI。JoinServer
显示服务器信息和加入按钮的 UI,放置在查找服务器 UI 的列表里。MainMenu
主菜单 UI。
创建两个第三人称关卡:
MainMenu
主菜单。GameMap
游戏地图。
设计 MainMenu
的 UI 如图所示。
设置 FindServer
的 UI 如图所示,设计一个 ScrollBox
用于存放 JoinServer
。
设置 JoinServer
的 UI 如图所示,可以加一个 Size Box
控制 UI 大小。
将 JoinServer
的 UI 的显示模式设置为 Desired
,调整大小至原点。
JoinServer
下新建一个 String
类型的变量 Name
,设为 public
和 Expose on Spawn
。
将文字与 Name
绑定。
JoinServer
下新建一个 Blueprint Session
类型的变量 Server
,设为 public
和 Expose on Spawn
。
绘制 MainMenu
下按下创建房间按钮的逻辑。
Create Session
是网络联机相关的内容。Open Level
可以切换到名称为GameMap
的关卡。
GameMap
里整俩出生点。
MainMap
的 Level Blueprint
显示 MainMenu
的 UI。
绘制 MainMenu
下按下打开服务器按钮的逻辑——清除所有 UI,然后显示 UI FindServer
。
绘制 MainMenu
下按下打开退出游戏的逻辑 QuitGame
。
绘制 FindServer
下按下返回按钮的逻辑——清除所有 UI,然后显示 UI MainMenu
。
FindServer
下定义一个刷新服务器事件 FreshServer_Event
。
Find Sessions
查找可用连接。- 如果找到可用服务器,创建
JoinServer
的 UI,设置其变量Server
和Name
的值,并将其放在Scroll Box
的子类。
创建对象和按下刷新按钮时都可以触发这个事件。
创建 FindServer
下 CircularThrobber
的 Visibility
属性的绑定。
绑定的逻辑:如果 Scroll Box
下有子节点,则不显示,否则显示。
运行游戏时选择 Number of Players
为 2
。
开跑!A 加入游戏后,B 就会显示 A 的服务器信息。
编写 JoinServer
中按下加入按钮的逻辑——JoinSession
即可加入。
开跑!
【选看】简易版本地存档、读档系统
创建两个 Widget Blueprint
:SaveGame_UMG
(存档界面)和 SaveGameSlot
(存档项)。
SaveGameSlot
如此设计。
给 SaveGameSlot
设计两个变量(读档时设置这两个变量),String
类型的 Text
和 Vector
类型的 Location
,并且都设置 Instance Editable
和 Expose on Spawn
。
将 TextBlock
里的 Text
与变量 Text
绑定。
绘制 SaveGameSlot
里的蓝图,按下 Load_Btn
时执行读档操作,将 Third Person Character
的 Location
设为存档里的 Location
。
绘制 SaveGame_UMG
的 UI 界面,其中的 Scroll Box
用于存放存档信息(SaveGameSlot
),让信息放不下的时候显示滚动条。
创建一个 SaveGame
类,命名为 SaveGame_BP
。
SaveGame_BP
里设计两个变量:String
类型的 SaveGameName
和 Vector
类型的 PlayerLocation
。并且都是数组。
SaveGame_UMG
中将 ScrollBox
设为变量。
在关卡蓝图/角色蓝图中绘制读档界面的逻辑。
在关卡蓝图/角色蓝图中绘制按下 Tab
键存档的逻辑。
存档位置。
在关卡蓝图/角色蓝图中绘制按下 P
键显示/隐藏读档界面的逻辑。
开跑!