学习了一段时间的UE5游戏开发,在此整理一下学习笔记,也当做再复习一遍(原理图片截取自教程视频,其余为项目中截取)
首先是一些游戏的基本概念,大部分不限于UE
1.Actor
Actor:最基本的可在世界中放置或动态生成的对象,可以进行三维变换,拥有一个根组件RootComponent(可以是各种Component)
Pawn:继承actor并且可以被控制器操纵
Character:继承了Pawn,拥有Character特有的东西(如角色运动组件UCharacterMovementComponent)
2.Component(组件):用来实现某个功能(如视觉表现,移动位置等),actor可以附加组件来实现需要的功能
一些UE自带的常见组件(名称取自C++中的名称,前缀“U”):
UActorComponent:定义可重复使用行为的组件的基类,这些行为可以添加到不同类型的Actor中,没有transform,不支持附加
USceneComponent:UActorComponent的派生类,拥有transform(意味着它拥有位置与旋转),支持其他组件附加在它上,没有可视化表示(没有网格,看不到)
UPrimitiveComponent:USceneComponent的派生类,用来渲染或处理碰撞数据
UCapsileComponent:UPrimitiveComponent的派生类,用来处理碰撞
UMeshComponent:UPrimitiveComponent的派生类,各种mesh组件的抽象基础类
UStaticMeshComponent:UMeshComponent的派生类,有可视化表示
USkinnedMeshComponent:UMeshComponent的派生类,支持有皮肤的骨骼mesh渲染,不支持动画
USkeletalMeshComponent:USkinnedMeshComponent的派生类,支持动画
UCameraComponent,USpringArmComponent:USceneComponent的派生类,作用如图,可以在编辑器中设置SpringArm的lag(滞后)来得到比较自然的摄像机效果
UMovementComponent:UActorComponent的派生类,在每次tick中移动
UProjectileMovementComponent:UMovementComponent的派生类,在其他组件的tick中移动
3.变换Transform
变换即物体的三维属性,由位置Location,旋转Rotation,缩放Scale(大小)组成。
全局空间(世界空间)与本地空间:全局空间为游戏中的总空间,固定x,y,z轴。本地空间为actor自己的空间,x,y,z轴可能与世界空间不同,如图中的坦克的本地空间的x,y轴与全局空间不同。
物体(actor及组件)在全局空间中的变换确定了它在世界中的绝对三维属性,在本地空间的变换则确定了相对于该物体的三维属性,如上图中的坦克的炮塔在本地空间中旋转不会改变它相对于坦克的位置。
Location:由x,y,z轴的坐标决定,在C++中用FVector表示与操作
Rotation:由三个欧拉角:pitch,yaw,roll决定,在C++中用FRotator表示与操作
俯仰角Pitch:绕y轴的旋转
偏航角Yaw:绕z轴的旋转
滚动角Roll:绕x轴的旋转
Scale:同样由x,y,z轴方向的伸缩决定
Inverse transform:向量从全局空间到本地空间的映射称为Inverse transform
4.tick以及DeltaTime
在很多actor以及组件内部会根据需要重写tick函数,这涉及到游戏的运行机制:在显示器显示的每一帧更新游戏内各部分的状态。
tick函数:实现每帧要做的事,如移动或计算某些数据
DeltaTime:每帧的时间,想要在不同的帧率下保持相同速度的状态变化(如actor的移动速度),可以在相应的状态语句中变化中乘DeltaTime,这使得原来的变化率"秒/DeltaTime"变成"秒/DeltaTime*DeltaTime",从而在任何情况下变化情况都是相同的。
5.控制器Controller
控制器用来操作它所占有的Pawn,一般分为玩家控制器PlayerController和AI控制器AIController,Pawn在控制器的操作下实现某些行为。玩家控制器接受玩家的输入并通过这些输入控制占有的Pawn,AI控制器则通过预设的AI逻辑控制占有的Pawn。控制器与Pawn通常为一对一的关系,但某些游戏也可能会需要一对多。
6.蓝图Blueprint
虚幻中的游戏脚本系统,基于各种节点的可视化编程,可以完成大部分需要的功能与行为,在游戏各部分的事件图表中进行编辑,通过创建需要的类的蓝图(子)类来赋予该类蓝图编辑能力(蓝图类的资产空间中不仅能够编辑事件图表,还有其他的编辑以及预览功能),通常与C++一起使用。如图所示的蓝图功能为游戏开始时在该actor所在位置播放音频。