UE4:Gameplay
Q. Gameplay包括哪些内容?
Pawn :玩家(Character)、盟友、敌人,Character默认带有碰撞胶囊组件和角色移动组件。
Controller:控制器,玩家控制器(PlayerController)、AI控制器(AIController)。
HUD:抬头显示,显示血条、枪准星、菜单。
Camera:摄像机。
GameMode:游戏模式,包括游戏规则和获胜条件。仅存在于服务器上。如果玩家需要同步当前GameMode信息,可将信息保存在一个AGameStateBase Actor 上。一款游戏可以有任意数量的GameMode,但同一时间只能使用一个GameMode。
- 玩家和观众数量
- 玩家如何加入游戏
- 出生点
- 如何处理暂停
- 关卡过度
GameState:游戏状态,这些属性与所有人皆相关,且所有人可见。包括联网玩家列表、得分、任务列表。存在于服务器和所有客户端上。可复制以保持同步。
- 游戏已运行时间
- 个体玩家加入游戏时间
- 玩家当前状态
- 游戏是否已开始
PlayerState:玩家状态,玩家姓名、玩家得分、玩家等级。存在于所有机器上。可复制以保持同步。
Q. 整个Gameplay的流程是怎样的?
初始化引擎——创建并初始化GameInstance——加载关卡——开始游戏
PIE编辑器启动和Standalone启动的区别:按下PIE之后才会创建并初始化GameInstance。关卡中的Actors将被复制,使游戏中的变更不影响编辑器中的关卡。
Q. 怎么设置GameMode?
- 通过配置文件设置:打开DefaultEngine.ini —— 找到 GameMapsSettings下的GlobalDefaultGameMode
2. 通过编辑器设置:
默认:Project Settings——Maps&Modes——Default GameMode
覆盖:World Settings——GameMode Override
3. 通过命令行参数设置:game选项设置游戏模式
UE4Editor.exe /Game/Maps/MyMap?game=MyGameMode -game
Q. GameMode的基类是什么?新旧版本有何区别?
4.14之前基类:AGameMode
4.14及之后基类:AGameModeBase
两种基类的对比:现在AGameMode是AGameModeBase的子类。AGameMode更适合标准游戏类型,如多人射击。
Q. AGameModeBase 有哪些函数?各有什么作用?
AGameModeBase函数 | 描述 |
InitGame | 在其他脚本之前调用 |
PreLogin | 接受或拒绝尝试加入服务器的玩家 |
PostLogin | 成功登录后调用,可在蓝图实现OnPostLogin, |
HandleStartingNewPlayer | 默认创建一个玩家Pawn,蓝图中可覆盖,修改新玩家身上发生的事件 |
RestartPlayer |
调用时生成一个玩家Pawn,在蓝图中使用OnRestartPlayer在此函数完成后添加逻辑。 指定重生地点用RestartPlayerAtPlayerStart和RestartPlayerAtTransform。 |
SpawnDefaultPawnAtTransform | 生成玩家Pawn,可在蓝图中覆盖 |
Logout | 玩家离开游戏或被摧毁时调用。可在蓝图实现OnLogout。 |
Q. AGameMode的流程逻辑是怎样的?
- 包含:跟踪整体游戏流程的状态机。
- 流程:EnteringMap——WaitingToStart:HandleMatchIsWaitingToStart——Actor-Tick——ReadyToStartMatch return true——InProgress:HandleMatchHasStarted——BeginPlay——ReadyToEndMatch return true——WaitingPostMatch:HandleMatchHasEnded(新玩家无法进入)——LeavingMap:HandleLeavingMap
- 失败状态 Aborted,调用AbortMatch开始此状态。
Q. GameState的基类是什么?有哪些函数?各有什么用?
基类是AGameStateBase。
AGameStateBase函数 | 描述 |
GetServerWorldTimeSeconds |
游戏开始到当前的“缩放”时间,GetTimeSeconds的服务器版本,可复制,用于服务器和客户端同步。 关于时间内容,参考另一篇博文(UE4:时间相关) |
PlayerArray | 所有APlayerState的队列。 |
HasBegunPlay | 是否已经开始游戏,BeginPlay被调用后为true。 |
Q. Pawn包含哪些组件?
CharacterMovementComponent 角色移动组件
能够使人身不使用刚体物理即可行走、跑动、飞行、坠落和游泳。
可设置属性包含:摔倒和行走摩擦力的值、在空气、水、土地中行进的速度、浮力、重力标度,以及角色能对物理对象施加的物理力。
CapsuleComponent 胶囊体组件
用于运动碰撞。
SkeletalMeshComponent 骨架网格体组件
Character自带该组件。
关于组件更详细内容,参考另一篇博文(UE4:组件)
Q. 在蓝图中,Pawn用什么控制移动?
SetActorLocation,你可以决定是瞬移还是逐渐走到某个位置。
Q. Pawn还有哪些特殊的子类?
DefaultPawn:包含DefaultPawnMovementComponent、CollisionComponent 、StaticMeshComponent 组件、一个用于添加移动绑定的布尔值,并且被默认设置为 true。
DefaultPawnMovementComponent:无重力并且可飞行。包括:MovementComponent、MaxSpeed、Acceleration、Decelerration。
DefaultPawn的子类:SpectatorPawn:适合用于实现观看功能。包含CollisionComponent 、SpectatorPawnMovementComponent 。
Q. 控制器用什么控制Pawn?
控制器用Possess函数控制Pawn,用Unpossess函数放弃控制Pawn。
Q. 什么时候使用PlayerController?
Pawn可能是临时存在的,但PlayerController在整个游戏过程中是一直存在的。重生可能会获得新的Pawn,但PlayerController是一样的。