开始之前
请确保已完成上一节 设置并编译项目中的目标:
创建了一个基于第一人称模板的项目,项目中需包含自定义的游戏模式C++类。
验证了项目是否使用了增强输入系统。
设置新角色
你之前创建了一个带有自定义游戏模式的新C++项目。 现在,你需要添加一个新的角色类,将其扩展为蓝图,并将其设为游戏模式中的默认玩家Pawn。
创建C++角色类
可放入关卡中的对象都是Actor资产。 Pawn是可以由玩家或AI控制的Actor,而角色是一类特殊的Pawn,可充当玩家角色。 如需详细了解这些Actor类,请参阅虚幻引擎游戏框架文档中的Actor、Pawn和角色类的信息。
要创建新角色类并为项目添加C++角色,请执行以下步骤:
打开主编辑器菜单,转到工具(Tool) > 新建C++类(New C++ Class)。
转到选择父类(Choose Parent Class)窗口,找到并选择角色(Character),然后点击下一步(Next)。
输入新类的名称(本教程使用
AdventureCharacter),然后点击创建类(Create Class)。虚幻引擎会自动在Visual Studio(VS)中打开新类的文件。 切换回VS以找到你的新文件。
如果VS没有自动提示你刷新项目,请回到虚幻编辑器,转到 工具(Tools) > 刷新Visual Studio(Refresh Visual Studio)。
将C++角色扩展到蓝图
就像你对游戏模式所做的那样,转到内容浏览器(Content Browser),右键点击你的角色(Character)类,选择基于<角色名>创建蓝图类(Create Blueprint class based on <CharacterName>),为Blueprints文件夹中的角色创建蓝图。
更改默认玩家角色
要在游戏中使用你的新角色,请将其设为项目的游戏模式中使用的默认Pawn类(Default Pawn Class)。
要将你的角色设置为默认玩家角色,请执行以下步骤:
如果你的游戏模式蓝图还未被打开,请转到 内容浏览器(Content Browser),双击你的蓝图,从而在 蓝图编辑器(Blueprint Editor)中将其打开。
转到该蓝图的细节(Details)面板,展开类(Classes)。 你可以在这里设置游戏模式所用的默认类。
将默认Pawn类(Default Pawn Class)设为你的角色蓝图(即
BP_AdventureCharacter)。点击窗口左上角的保存(Save)按钮以保存游戏模式蓝图,然后点击编译(Compile)。
探索输入操作
第一人称模板中的默认角色使用一组预先存在的输入操作,这些输入操作结合了蓝图,使角色能够移动、跳跃和环顾四周。
打开并探索这些输入操作,了解它们驱动角色移动的原理。
在内容浏览器(Content Browser)资产树中,转至Content > Input > Actions文件夹。 你会看到三个输入操作,名称为IA_Jump、IA_Look和IA_Move,分别对应了跳跃、观察和移动。
双击IA_Jump将其打开并查看其细节(Details)面板。
角色的输入操作使用以下属性来定义操作类型及其功能:
属性 | 说明 |
值类型(Value Type) | 决定了此输入操作包含何种类型的值。 请根据你希望通过此输入操作捕获的移动类型,选择一种值的类型。 例如, Axis1D是一个浮点值,用于捕获一维移动(向内或向外滚动)或标量调整(改变移动速度)。 Axis2D是一个包含两个浮点值的向量,用于捕获二维移动,例如WSAD的控制。 Axis3D是一个包含三个浮点值的向量,用于捕获三维移动,例如飞行或游泳的控制。 |
触发器(Triggers) | 创建触发器来表示动作的可能状态,从而让你可以在蓝图或代码中使用这些触发器来编译逻辑。 当映射到 |
修饰符(Modifiers) | 在将虚幻引擎所接收的原始输入值发送给其他输入触发器之前,修改这些原始输入值。 |
探索输入映射上下文
输入操作不能单独起作用;它们需要输入映射上下文(Input Mapping Context)才能知道应该由哪个按钮触发,以及在什么上下文中触发。 这是成组的映射,描述了触发输入操作的规则。 你可以创建并自定义多组输入映射上下文,并将其动态地开启和关闭,从而适应游戏的需求。
默认角色拥有现成的输入映射上下文,在内容浏览器中的位置是Content > Input。 双击IMC_Default即可将其打开并查看其细节(Details)面板。
IMC_Default包含了三项映射,可将三项输入操作分别映射到用户的输入。 每项映射都会拉取输入操作的触发器和修饰符。
映射跳跃操作
展开IA_Jump映射。 你会发现存在两项功能按钮绑定:空格键(Space Bar)和游戏手柄正面底部按钮(Gamepad Face Button Bottom)。 你在游戏中按下这两个按钮中的任意一个时,就会触发IA_Jump。
映射键盘按键的2D移动
接下来,展开IA_Move 以查看其九项绑定,这些绑定分别对应WASD键、方向键以及游戏手柄左摇杆。
与简单的布尔跳跃相比,利用数个单独的按键创建二维移动需要更多的设置。
按键输入是一维的,未按下时返回值为0,按下时返回值为1。 D键或向右键就非常适合这种原理,因为这两个按键应该让角色沿X轴的正方向移动(即向右移动)。 然而,我们还需要让角色向前、向左和向后移动。 换句话说,我们需要在X轴和Y轴上都具有0到1以及0到-1的值。
因此,为了获得在各个方向上移动的值,输入操作会使用修饰符(Modifier)将输入值变换到不同的轴上,或者将其变换为负值。
例如,请展开A键的功能按钮绑定及其修饰符(Modifiers),并查看其配置方式。 你会发现存在一个取反(Negate)修饰符。 这意味着当按下此键时,值1.0会变为-1.0,即让角色沿X轴的负方向移动,也就是向左移动。
展开取反(Negate)修饰符后,你可以指定是否要对X、Y或Z轴的值取反。 这些轴均默认取反,但你可以按需为指定的轴限制取反操作。
现在,展开S键的功能按钮绑定。 为在Y轴上创建向后移动,此绑定有两个修饰符:交换输入轴值(Swizzle Input Axis Values)可将输入从X轴改为Y轴,以及取反(Negate)修饰符。
展开交换输入轴值(Swizzle Input Axis Values)修饰符。 顺序(Order)选项指定了应如何重新排序各轴的值。 在本例中,输入操作使用的是YXZ,因此相比默认的XYZ顺序,X轴和Y轴互换了。
映射游戏手柄的2D移动
游戏手柄摇杆使用二维轴的输入,而非一维的按键输入,因此这种映射只需要一个功能按钮绑定就能处理摇杆的移动。
只要展开游戏手柄左摇杆2D轴(Gamepad Left Thumbstick 2D-Axis)的修饰符(Modifiers),你就能看到 盲区(Dead Zone)和标量(Scalar)修饰符。
盲区(Dead Zone)可指定忽略输入的阈值上下限。 使用盲区即可过滤掉摇杆中心附近的小幅输入值,这些值通常是由于摇杆未能完全居中或因轻微手指压力而产生的无意输入。
标量(Scalar)可指定X、Y和Z轴值的乘数,从而让你控制角色在各个方向上的移动速度。
映射游戏手柄和鼠标的观察功能按钮
展开IA_Look操作映射。 此输入操作已被绑定到游戏手柄右摇杆2D轴(Gamepad Right Thumbstick 2D-Axis)控制。
它仅需要一个死区(Dead Zone)修饰符来过滤误差。
默认角色对为基于鼠标的摄像机控制使用了单独的映射上下文。 返回内容浏览器(Content Browser)并打开IMC_MouseLook。 此IMC为IA_MouseLook输入操作创建了绑定,该操作与IA_Look完全相同。
通过使用单独的摇杆和鼠标输入操作,你可以为每种输入应用不同的修饰符,并将它们视为独立的输入路径。 但在本教程中,你会将所有内容整合到一个输入映射上下文中。
展开IA_MouseLook操作映射。 此输入操作已被绑定到鼠标XY 2D轴(Mouse XY 2D-Axis)控制。
鼠标控制绑定已经使用2D轴,因此它唯一需要的修饰符是Y轴取反(Negate),以便在向上移动鼠标时让角色向下看。 这在第一人称游戏中是传统做法,但你也可以删除此修饰符来反转视角控制。
修改输入映射上下文
由于你刚刚开始一个新项目,将所有输入映射整合到一个输入映射上下文中。
要基于默认玩家的映射上下文创建自己的IMC,请执行以下步骤:
在内容浏览器(Content Browser)中,在Content > Input文件夹中,右键点击
IMC_Default并选择复制(Duplicate)。将映射上下文命名为
IMC_Adventure,然后双击打开。展开IA_Look映射。
单击IA_Look旁的加号按钮,添加新的控制绑定。
点击无(None)打开键值列表,展开鼠标(Mouse),并选择鼠标XY 2D轴(Mouse XY 2D-Axis)。
在鼠标控制绑定中,点击修饰符(Modifiers)旁的加号按钮,将无(None)更改为取反(Negate)。
展开索引 [0](Index [0])修饰符,并取消选择X和Z。 此修饰符应仅对Y轴取反。
保存并关闭映射上下文。
要反转摄像机控制,你可以从摇杆或鼠标控制绑定中添加或移除取反修饰符。
下一步
在下一节中,你将了解默认角色蓝图连接玩家输入和角色移动的方式,并开始在代码中重新实现这一连接。
配置角色移动
学习如何使用C++绑定玩家输入与角色移动。