ue4如何支配初始pawn

1.余额是钱包充值的虚拟货币按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载可以购买VIP、C币套餐、付费专栏及课程。

但是仅仅调用这一个函数不够,还需要再你的Pawn构造函数设置属性AutoPossessAI

想象兔子与蜗牛比赛游戏框架嘚基础是GameMode。GameMode设置了游戏的规则比如“最先经过终点的玩家获胜”,他也处理players的生成

Player在PlayerController中设置,PlayerController可以拥有一个PawnPawn是一个游戏中Player可操作的對象(物理上的代表),当Controller拥有这个Pawn并且可以为其行为设置规则。在我们的例子中将有两个Pawn,一个是蜗牛一个是兔子。兔子将设置為Character类(Pawn的一个特殊子类)Character中有已经封装好的移动功能组件Character Movement Component,包含跑跳等常规动作因为蜗牛有区别有兔子的运动风格,所以他从pawn类直接繼承

你可以在Pawn中设计自己的移动逻辑或其他游戏逻辑,这些功能也可以在Controller中设计一个Controller可以是从人类玩家获得输入的PlayerController,也可以是由电脑洎动控制的AIController在这个例子中,玩家将会控制蜗牛所以PlayerController控制蜗牛Pawn。AI控制兔子AIController持有兔子这个角色并且在之中设置了何时他应该停止,冲刺鉯及瞌睡的游戏逻辑只有人类玩家关心由摄像机提供的视角,所以只有蜗牛Pawn中的一个Camera

在游戏过程中来自玩家的输入将会移动蜗牛,HUD重疊在摄像机提供的视角上显示当前排名以及花费的比赛时间。

1、使用玩家输入或者AI逻辑控制Pawns

  • PlayerController是Pawn与玩家控制他之间的接口其代表了玩家嘚意志。

2、代表世界的玩家、朋友、敌人

  • Pawn是一个actorPawn可以被Controller持有,他们可以接收输入可以做很多游戏逻辑。
  • Character是一个人形风格的Pawn继承自Pawn。怹默认自带一个胶囊体碰撞器角色运动组件他可以做到基本的人形移动,他可以平滑的复制移动并且有一些动画相关的功能
  • HUD是一个抬头显示器。可以显示健康、弹药等每个PlayerController通常有一个。
  • Camera相当于玩家的眼球并且管理他的行为每个PlayerController通常也有其中一个。

4、设置与追踪游戲的规则

  • 游戏模式(GameMode)游戏的概念分为两类GameMode与GameState是游戏的定义,包括像游戏规则的事情胜利的条件。他只存在于服务器上他通常没有呔多的数据变化,也没有客户端需要了解的瞬态数据
  • 游戏状态(GameState)包括像关联球员名单得分,那里的作品是一盘棋或者游戏中的任务唍成列表。GameState存在于所有服务器与客户端上可自由复制使所有计算机保持最新状态。
  • 玩家状态(PlayerState)是游戏参与者的状态PlayerState包含玩家姓名,嘚分类似MOBA的匹配等级。所有玩家的PlayerState存在于所有机器上可以自由复制保持同步。

三、游戏模式和游戏状态

有两个主要类别处理有关正在玩的游戏的信息:Game ModeGame State

即使是最开放的游戏也有规则,这些规则构成了Game Mode在最基本的层面上,这些规则包括:

  • 现有的球员和观众人数以忣允许的最大球员和观众人数。
  • 玩家怎样进入游戏其中包括选择生成位置和其他生成/重生行为的规则。
  • 是否可以暂停游戏以及如何开始游戏的暂停。
  • 关卡之间的切换包括游戏是否应该以电影模式启动。

游戏中与规则相关的事件发生并需要跟踪并与所有玩家共享时該信息将通过Game State进行存储和同步。这些信息包括:

  • 游戏运行了多长时间(包括本地玩家加入前的运行时间)
  • 当每个玩家加入游戏时,以及該玩家的当前状态

虽然某些基本要素,比如需要玩的玩家数量或者这些玩家加入游戏的方法,对于许多类型的游戏来说都是常见的根据正在开发的特定游戏,可以实现无限的规则变化无论这些规则是什么,Game Modes都旨在定义和实现它们目前有两种常用的Game Modes基类。

Modes的基类AGameModeBase昰经典简化版本AGameMode。AGameMode是版本4.14之前的游戏模式基类仍然存在并且像以前一样运行但现在是AGameModeBase的一个子类。AGameMode由于其实现了匹配状态的概念因此哽适合标准游戏类型,如多人射击游戏AGameModeBase是新代码项目中包含的新默认游戏模式,因为它简单而有效

所有Game Modes都是AGameModeBase子类,其中包含可以覆盖嘚相当多的基本功能一些常见功能包括:

接受或拒绝尝试加入服务器的玩家。Login函数设置ErrorMessage为非空字符串则导致该函数失败。PreLogin在Login之前调用并且在调用Login之前可能会经过大量时间,特别是如果加入的玩家需要下载游戏内容

成功登录后调用。这是第一个可以安全地在PlayerController调用复制函数的地方OnPostLogin可以在Blueprint中实现以添加额外的逻辑。

在PostLogin或者无缝旅行之后调用可以在蓝图中覆盖,以改变新玩家的情况默认情况下,它会為玩家创建一个pawn

这实际上产生了玩家的Pawn,并且可以在蓝图中被覆盖

当玩家离开游戏或被摧毁时调用。OnLogout可以实现蓝图逻辑

AGameModeBase可以为游戏烸种比赛形式,任务类型或特殊区域创建该类的子类游戏可以具有任意数量的游戏模式,因此可以具有AGameModeBase该类的子类; 但是在任何给定时間只能使用一种游戏模式。每次通过该UGameEngine::LoadMap()函数初始化关卡以进行游戏时都会实例化Game Mode

Mode不会复制到任何加入多人游戏的远程客户端它只存在于垺务器上,因此本地客户端可以看到所使用的游戏模式类(或蓝图)但无法访问实际实例并检查其变量以查看游戏进展时发生的变化。洳果玩家确实需要与当前游戏模式相关的最新信息则该信息通过存储在AGameStateBase Actor 上保持同步,这将与游戏模式一起创建然后复制到所有远程客戶端。

AGameModeAGameModeBase一个子类有一些额外的功能来支持多人匹配和遗留行为。所有新创建的项目都默认使用AGameModeBase但如果需要此额外行为,则可以切换箌继承AGameMode如果继承AGameMode,则还应继承游戏状态AGameState这也支持匹配状态机。

  • EnteringMap是最初的状态actor还没有每帧更新,世界还没有完全初始化当物品完全加载时,它将转换到下一个状态
  • WaitingPostMatch是倒数第二个状态,HandleMatchHasEnded在进入时被调用actors仍然在每帧更新着,但新玩家无法加入当地图传输开始时,它會转换到下一个状态
  • LeavingMap是正常流程中的最后一个状态,并在进入时调用HandleLeavingMap该匹配在转移到新地图时保持此状态,并将转换回该地图EnteringMap
  • Aborted是故障状态,可以通过调用AbortMatch启动当存在不可恢复的错误时设置此项。

匹配状态几乎总是处在InProgress因为这是BeginPlay被调用的状态并且actors开始每帧更新的时候。然而个别游戏可以覆盖这些状态的行为以构建具有更复杂规则的多人游戏,例如允许玩家在等待其他玩家加入多人射击游戏时自由哋飞行

可以创建从Game Mode类派生的蓝图,并将它们用作项目或关卡的默认Game Mode

从Game Mode派生的BP可以设置以下默认值:

此外,Game Modes蓝图非常有用因为它们可鉯在不改变代码的情况下调整变量,因此可以用于使单个Game Mode适应多个不同关卡而无需使用硬编码资产引用或需要工程支持和代码更改每一佽调整。

有几种方法可以为一个关卡设置游戏模式从最低优先级到最高优先级排序:

  • 要覆盖单个地图的项目设置,请在编辑器的世界设置选项卡中设置GameMode覆盖
  • URL可以传递给可执行文件,以强制游戏加载特定选项使用该game选项设置Game Mode。有关更多信息请参阅。
  • 最后可以/Script/Engine.WorldSettings/在DefaultEngine.ini文件嘚部分中设置映射前缀(以及URL方法的别名)。这些前缀为具有给定前缀的所有地图设置默认游戏模式

该Game State是负责使客户能够监视游戏的状態。从概念上讲Game State应该管理想让所有连接的客户端知道的信息,并且特定于Game Mode但不是特定于任何单个玩家它可以跟踪游戏范围内的属性(例如连接的玩家列表,Capture The Flag游戏中的队伍得分在开放世界游戏中完成的任务,等等)

Game State不是追踪玩家特定事物的最佳位置例如特定玩家茬Capture The Flag比赛中为球队得分的数量,因为Player State可以更清晰地处理通常,GameState应该跟踪在游戏过程中发生变化的属性并且对每个人都是相关且可见的。雖然Game Mode仅存在于服务器上但Game State存在于服务器上并被复制到所有客户端,随着游戏的进行使所有连接的计算机保持最新状态

AGameStateBase是基本实现,它嘚一些默认功能包括:

(获取服务器世界时间)

这是服务器的UWorld功能版本GetTimeSeconds将在客户端和服务器上同步,因此可以用于复制

这是所有APlayerState对象嘚数组,为游戏中的所有玩家做某事时非常有用

AGameStateBase通常在C ++或蓝图中进行扩展,以包含让玩家了解游戏中发生的事情所需的其他变量和函数所做的具体修改通常基于制作游戏状态的配对游戏模式。游戏模式本身也可以将其默认的游戏状态类型覆盖为任何C ++类或派生自的蓝图AGameStateBase

//守卫的状态:初始化为“闲置状態”
//如果玩家被守卫发现守卫停止巡逻
//声源与守卫所处位置,计算出朝向 //如果成功分散守卫注意力守卫停止巡逻 //闲置状态下,进行巡邏

我要回帖

 

随机推荐