Week2¶
这节课有点事,所以漏了一些内容,因此使用AI来生成了部分内容捏😋(指笔记部分)。主体是介绍UE的一些类。
了解UE5常见的类¶
Actor类¶
Actor是UE中的基类,是一种可以放置在关卡(Level)中的对象,从游戏场景中的静态网格体(Static Meshes),到声音、摄像机、玩家角色等,都是Actor。
如图所示,UE5中可以设置几种不同的Actor:
- Actor:基类,可以放置在关卡中。
- 角色(Character):可以移动的Actor,通常用于玩家角色,属于一种特殊的Pawn。
- Pawn:可以移动的Actor,可以被控制。
- 点光源(Point Light):发光的Actor。
- 玩家出生点(Player Start):玩家角色的初始位置。
- 触发框(Trigger Box):触发器,在场景中的特定区域内触发事件。
- 触发球体(Trigger Sphere):球形触发器。
PlayerController 类¶
PlayerController 是一个用于处理玩家输入和控制的类。它是 Player 与 Pawn 或 Character 之间的中介。在多人游戏中,每个玩家都有一个对应的 PlayerController。
- 负责处理玩家的输入(如键盘、鼠标、游戏手柄等)。
- 管理 Pawn 或 Character 的控制,玩家通过 PlayerController 控制游戏中的实体。
GameMode 类¶
GameMode 定义了整个游戏或关卡的规则和玩法,它是整个关卡的“控制中心”。你可以在 GameMode 中配置玩家的 Pawn 类型、玩家开始时的位置、得分规则、游戏胜利条件等。
- 管理游戏的核心规则和流程(例如,选择玩家角色、设置计时器等)。
- 在单人游戏和多人游戏中,GameMode 负责处理大部分游戏逻辑。
GameState 类¶
GameState 用于存储有关当前游戏状态的信息,它在 GameMode 和 PlayerState 之间充当数据的传递者。GameState 是一个服务器端类,用于存储全局游戏信息(如当前回合、得分、时间等)。
- 存储全局游戏信息,供所有玩家访问。
- 可以用来实现同步游戏状态的逻辑,尤其是在多人游戏中。
Widget 类(UMG)¶
Widget 类用于实现用户界面(UI)。在 Unreal 中,UI 组件是通过 UMG(Unreal Motion Graphics)来创建的。你可以创建各种类型的 UI 元素,如按钮、文本框、进度条、图像等,并通过蓝图来处理 UI 逻辑。
- 用于创建并控制游戏中的用户界面。
- 支持丰富的 UI 设计与交互功能,如动态更新文本、响应按钮点击等。
作业:设计简单逻辑和UI¶
要求实现:
- 物件规则:射击命中方块,获得积分X分;子弹命中方块后销毁;方块被子弹命中后,缩放为y倍,再次被命中后销毁
- 游戏流程:游戏开始时随机几个方块成为“重要目标”,射击命中后获得双倍积分;游戏开始后限时T秒,时间到后游戏结算,打印日志输出每个玩家获得的积分和所有玩家获得的总积分
拓展:利用UMG制作结算UI替代日志打印;支持多人联机。
本次作业使用蓝图实现逻辑。
设计逻辑¶
玩家加分逻辑¶
为了实现计分逻辑,首先设置Score变量,根据蓝图结构确定,要在BP_FirstPersonCharacter中添加整数变量Score,然后设计加分逻辑:根据输入的方块分数和是否为“重要目标”来进行加分。
在蓝图中划出Score Counter的注释块方便管理,添加Custom Event并命名为ScoreHandler来处理分数,接收参数IsImportant和ScoreAmount,获取角色的Score变量(先添加这个变量才能Get),然后设计对应的加分逻辑并赋值回去。如下图所示:
碰撞调用加分¶
子弹的蓝图在BP_FirstPersonProjectile处,于是在此处添加逻辑:Event Hit触发后调用Other来获取方块的Actor,使用Cast to方法来得到对象,然后调用ScoreHandler函数来进行加分。如下图所示:
碰撞后缩小和销毁¶
把方块转换成蓝图类,然后添加逻辑:首次集中缩小,二次击中销毁,注意设置加分逻辑在销毁之前。
随机重要目标设定¶
把方块转换成蓝图类,在蓝图类内加入IsImportant的布尔值,默认设为0,然后在GameMode里获取所有方块实例,使用Random函数来随机设定,完成初始化。
我在此处使用了整数随机数生成器,并且通过大小比较来控制重要目标的生成比例,完成对方块的初始化。
加入倒计时¶
在GameMode中加入时间的float变量(此处我命名为TimeLimit),然后使用Set Timer by Event来计时并调用函数来减去时间。如下图所示:(仅展示部分逻辑)
设计UI¶
设计一个结束页面,使其能够展示分数,这里需要用到UMP组件,设计时注意先加入画布面板,然后设计有关部分。设计时使用锚点有利于在不同分辨率上保持位置的一致性。如下图展示:
这里我设计了两个按钮来实现重启和退出;红色文本框内配置了GetText来获取分数。
另外再设计一个页面来显示剩余时间:
结束页面应该在游戏结束(倒计时归零)后再打开,时间的UI应该在游戏完成加载后就开始显示,所以要在GameMode内加入相关显示逻辑:
成果¶
打包到安卓端测试:
如上图所示,完成了既定要求。
(联机不太好弄,有空再做)