企业网站建设 邮箱,号号网站开发,微网站开发工具,wordpress个人淘宝客写在前面
Pawn继承于Actor#xff0c;增加了一些用于控制和提供玩家视角的功能#xff0c;这里主要是介绍一下Pawn类的实现。
一、创建一个Pawn的C类
创建的C类也是放在Source文件夹中的Public和Private文件夹中#xff1b;选择Pawn作为继承的父类#xff1b;头文件中除…写在前面
Pawn继承于Actor增加了一些用于控制和提供玩家视角的功能这里主要是介绍一下Pawn类的实现。
一、创建一个Pawn的C类
创建的C类也是放在Source文件夹中的Public和Private文件夹中选择Pawn作为继承的父类头文件中除了Actor的函数外仅额外增加了一个负责设置玩家输入组件的函数SetupPlayerInputComponent()如下 在.cpp文件中也默认实现了SetupPlayerInputComponent()函数如下 二、增加摄像机组件
摄像机相当于是提供了一个玩家视角它绑定在Pawn上之后玩家视角就能随着Pawn移动而移动头文件实现如下 并在.cpp文件中把摄像机组件挂载到根组件上实现如下 一些补充如下
1. StaticMesh的网格体形状可以预先设置
代码实现如下 一些注意的点如下 首先要用MeshComponentAsset变量尝试加载资源如果能加载则将资源赋予网格体资源的路径可以通过右键资源-复制引用获得如下 2. 摄像机组件可以和弹簧臂组件组合使用
当然直接将摄像机固定在Pawn的某个位置也是可以的但这样视角移动就会很生硬在启动和停止时没有过渡动画的效果实现就是上面那样但如果使用弹簧臂连接摄像机和Pawn则视角移动更为自然这也是常用的做法首先在头文件中增加弹簧臂组件如下 然后在构造函数中设置弹簧臂并将摄像机挂载到弹簧臂上如下 一些注意的点如下 弹簧臂是挂载在根组件上摄像机是挂载在弹簧臂的预设插槽Socket上弹簧臂的倾斜角度和长度取决于摄像机想要放置的位置
3. 可以用某个组件代替默认的根组件
默认的根组件只是用于占位本身并没有作用因此可以用别的有实际作用的组件替换掉这里用一个隐藏的更大的球形组件注意不是球型静态网格组件替换根组件并设置为不可见头文件实现如下 构造函数中实现如下 三、创建一个Pawn的蓝图类
Pawn类和Actor类不同它的很多功能需要用蓝图类辅助实现当然完全用C也可以但会很麻烦而且不直观相当于是用文字描述图片了所以一般是要新建一个和Pawn类对应的蓝图类作进一步开发由C创建的蓝图类相当于是继承了C类
1. 由C类创建蓝图类的方法
(1) 右键C类选择创建基于xxx的蓝图类 (2) 在内容文件夹下放置蓝图类的路径下右键-创建基础资源-选择蓝图类然后在所有类中搜索对应的C类创建即可 2. 挂载组件的对应关系
在C类的构造函数中RootComponent下挂载了两个组件一个静态网格组件一个是摄像机组件而且这两个组件处于同一层在蓝图类中的组件面板可以清楚的看到它们之间的挂载结构按照刚刚的设置如果不使用弹簧臂则如下 如果使用弹簧臂则结构如下 当然组件也可以在蓝图中继续挂载或者修改
3. 摄像机组件和Pawn之间的关系
摄像机组件实际上是Pawn的一部分但是它从位置上来说应该有两种情况 第一人称游戏摄像机组件的位置在Pawn的眼睛位置第三人称游戏摄像机组件的位置在Pawn的后上方位置 通常会用另外一个网格组件这里暂时是用StaticMeshComponent作为Pawn的本体也就是充当Pawn生物的外形按照刚刚在C类构造函数中的设置如果不使用弹簧臂组件则摄像机和静态网格组件之间的位置关系如下图 如果使用弹簧臂组件则摄像机和静态网格组件之间的位置关系如下图 四、在地图上以Pawn开始游戏
Pawn因为可以作为玩家的控制的视角所以我们需要在开始游戏之后获得某个Pawn的视角并且能够控制Pawn的运动
1. 获得Pawn视角
如果什么都不设置默认开始游戏是将视角放到PlayerStart上的并对准前向红色箭头如下 1.1 在PlayerStart处生成一个Pawn
通过设置游戏模式GameMode可以在PlayerStart处生成一个Pawn这样就可以顺理成章地获得它的视角了通过默认生成的游戏模式C类这个是创建C项目的时候就自动创建了的里面没有内容仅继承了AGameModeBase类派生一个游戏模式蓝图类BP_CreatureGameMode如下 打开BP_CreatureGameMode修改默认Pawn类为BP_CreaturePawn就可以修改开始游戏时在PlayerStart处生成的Pawn 之后还需要在世界中应用新的游戏模式在主面板上打开世界场景设置面板修改其中的游戏模式覆盖为刚刚创建的游戏模式蓝图类即可此时用选中的视口播放游戏就可以在PlayerStart处生成我们选定的Pawn而且视角是在Pawn绑定的摄像机组件上 1.2 将某个Pawn赋予玩家视角
如果是在PlayerStart处生成一个Pawn是有一些不足的 没有办法赋予它一些预设的实例参数因为它是一个新生成的实例完全依赖于C类或者蓝图类中的默认设置也没有办法在不同的Pawn之间切换视角只能一直在PlayerStart视角 这里介绍如何为某个Pawn赋予玩家视角C实现 只需要在构造函数中设置AutoProssessPlayer变量即可 Editor实现 在细节面板中选中Pawn-自动控制玩家修改值为玩家0即可 2. 绑定玩家输入控制
2.1 创建轴映射
在Editor中点击编辑-项目设置 在引擎-输入-Bindings里面新增轴映射如下 输入的映射方式主要有两种 轴映射输入的设备可提供输入程度的变化范围输入的是一个连续值该值会乘以设定的缩放值然后传给后续响应事件函数中的float类型参数Value操作映射输入的设备仅提供是否输入的信号即离散的0/1后续有两个响应事件函数一个响应按下按钮事件一个响应释放按钮事件可以参考博文UE4中轴映射
2.2 绑定到响应事件函数
在Pawn默认构建的SetupPlayerInputComponent()函数中可以绑定映射对应的响应事件函数实现如下 注意BindAxis()函数中的字符串参数就是刚刚在项目设置中创建的轴映射事件名称必须要相互对应
3. 实现玩家控制的影响
前面只是将玩家输入绑定到Pawn某个成员变量上并没有对Pawn产生实际的影响这里将实现对Pawn的影响也就是令Pawn产生位移实现如下 上面的代码里面有两种实现推荐是用第二种类型的
五、Pawn的视角控制
视角控制实际上就是实现Pawn的转身和俯仰视首先是创建对应的轴映射