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?

  1. 通过配置文件设置:打开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:包含DefaultPawnMovementComponentCollisionComponent 、StaticMeshComponent 组件、一个用于添加移动绑定的布尔值,并且被默认设置为 true。

        DefaultPawnMovementComponent:无重力并且可飞行。包括:MovementComponent、MaxSpeed、Acceleration、Decelerration。

DefaultPawn的子类:SpectatorPawn:适合用于实现观看功能。包含CollisionComponent 、SpectatorPawnMovementComponent 。

Q. 控制器用什么控制Pawn?

控制器用Possess函数控制Pawn,用Unpossess函数放弃控制Pawn。

Q. 什么时候使用PlayerController?

Pawn可能是临时存在的,但PlayerController在整个游戏过程中是一直存在的。重生可能会获得新的Pawn,但PlayerController是一样的。

 

posted @ 2022-06-28 17:32  番茄玛丽  阅读(551)  评论(0编辑  收藏  举报