ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

GameplayAbilitiesSystem(九)

GameplayAbilitiesSystem(九) 目录前言GameModeGame Mode 类Game Mode 蓝图摄像机和弹簧臂角色头部动作修正总结前言UE 中的‌ GameMode‌ 是游戏规则的‌服务器端权威定义者与流程控制器‌仅存在于服务器负责制定玩法逻辑、管理玩家生成/重生及判定胜负‌不同步至客户端。之前已经有玩家控制器和角色GameMode 可以将这些串连包起来因此需要设置关卡的 GameMode 属性。GameModeGame Mode 不仅有 Pawn 和 PlayerController 属性而且还有 HUD、GameState、PlayerState、Spector。设置 Game Mode 之前需要添加 Game Mode C 类这样我们就可以在 C 层控制 Game Mode 的属性及行为并以该类作为游戏的骨架。并在该类基础上建立 Game Mode 蓝图从蓝图层也可控制 Game Mode。Game Mode 类Game Mode 蓝图要基于 C 类建立所以 C 类即为基类引擎提供了 Game Mode Base 类型Visual Studio 2022 中运行后启动项目启动引擎在 Content Drawer 中 【C Classes】-【Aura】-【Public】目录下右键选择【New C Class…】选项选择 Game Mode Base 并点击【Next】重新命名为 AuraGameModeBaseAuraGameModeBase 会报错Path 后面追加 /GameGame Mode 蓝图C 类创建好之后需要创建 Game Mode 蓝图在 Blueprints 下添加 Game 文件夹并创建 BP_GameModeBase 蓝图创建时选择其父类为 AuraGameModeBase。创建好之后双击打开设置其属性 Player Controller Class 为 BP_AuraPlayerControllerDefault Pawn Class 为 BP_AuraCharactor。编译并保存之后打开 StartupMap 关卡设置其属性 GameMode Override 属性为 BP_AuraGameModeBase其他属性会自动填充如下图所示点击盾牌图标下拉选择 Basic - Player Start 拖拽至场景中添加一个玩家起点运行游戏即可在 Player Start 处出现我们的角色。此时按键 WASD 后角色会前后左右移动表示我们可以控制角色。但是我们要实现是俯视角而不是第一人称游戏所以另需要添加摄像机和弹簧臂以达到俯视角效果。摄像机和弹簧臂摄像机和弹簧臂可以使用 C代码实现也可使用蓝图实现但是使用蓝图比 C 要方便快捷所以这里我们以蓝图为例添加二者。打开 BP_AuraCharactor 蓝图选中左侧 Capsule Component即角色的胶囊组件也是弹簧臂所依附的地方。然后点击【Add】按钮搜索 Spring Arm选择并添加再选中刚刚添加的 Spring Arm 组件点击 【Add】按钮搜索 camera选中并添加选中 Spring Arm按 E 键切换至旋转模式顺时针旋转至合适角度-45°并设置弹簧臂的长度750。如果旋转无法精细控制可在右侧编辑区设置同时确保弹簧臂的 Use Pawn Control Rotation 取消选中即不支持玩家控制视角旋转。这样就实现了俯视角的效果但是现在如果运行游戏控制角色移动会发现角色前后左右移动很怪异就是角色不会朝向其移动方向而是始终朝向前方从摄像机到角色的方向。为了使用角色时刻朝向其移动方向还需要做一些设置这部分我们在 AuraCharacter 类中实现。关闭引擎回到 Visual Studio 2022打开 AuraCharacter.h在 Public 区域添加其无参构造方法并在 AuraCharacter.cpp 添加该构造方法实现。调用 GetCharacterMovement() 方法设置 bOrientRotationToMovement、 RotationRate、bConstrainToPlane、bSnapToPlaneAtStart并设置 、bUseControllerRotationPitch、bUseControllerRotationYaw、bUseControllerRotationRoll 为 false#includeCharacter/AuraCharacter.h#includeGameFramework/CharacterMovementComponent.hAAuraCharacter::AAuraCharacter(){GetCharacterMovement()-bOrientRotationToMovementtrue;GetCharacterMovement()-RotationRateFRotator(0.0f,400.0f,0.0f);GetCharacterMovement()-bConstrainToPlanetrue;GetCharacterMovement()-bSnapToPlaneAtStarttrue;bUseControllerRotationPitchfalse;bUseControllerRotationYawfalse;bUseControllerRotationRollfalse;}即便这样设置后运行游戏你会发现移动角色进行前后左右移动时角色并没有转向而是地面在旋转或者说是摄像机跟着角色一起在旋转。这是因为摄像机并没有被固定的缘故打开角色蓝图将弹簧臂 Camera Settings 的 Pitch、Yaw、Roll 取消勾选两次运行游戏即可正常。角色头部动作修正现在角色可以正常移动朝向也正确但是角色在移动停止后头部会有一个来回抽动的小动作很不和谐。究其原因是因为在角色的动画蓝图中状态机仅有一个状态所以这个动作在从运动到静止之后会重复两次摆头动画。解决这个问题并不难打开 ABP_Aura 蓝图为其添加一个状态命名为 Idle 表示空闲静止将原状态 IdleWalkRun 命名为 Running运动并规定当角色移动速度大于等于 3 时为运行其他情况为空闲将两个状态之间连线设置一个变量为 ShouldMove布尔类型当速度大于等于 3 时ShouldMove 为 true反之为 false打开 Loop Animation 选项再次运行游戏移动角色当角色停下来时头部动作会变得自然。总结现在我们能控制角色移动并使用 Game Mode 将之前添加的组件包装到了一起接下来将进行游戏玩法能力系统实现。当然这部分既有趣也很复杂。
返回列表