虚幻4C++核心类pawn类,解读

在看这篇博客时需要对Actor类有了解(Actor类解读)

pawn类在游戏中是可以被控制的一类对象,他继承自actor类,和actor属于都可以被放置在游戏场景中的对象,只不过多了允许被玩家或者AI控制这种特性
新建一个C++类选择继承pawn类
虚幻4C++核心类pawn类,解读_第1张图片
创建完成之后可以看到默认创建完成之后,他和默认的Actor类相比仅仅多了一个叫SetupPlayerInputComponent的虚函数,就是通过这个函数,玩家能实现对pawn对象的输入并且控制
虚幻4C++核心类pawn类,解读_第2张图片
接下来可以在C++类里实现控制自己定义的Pawn
虚幻4C++核心类pawn类,解读_第3张图片
先进行项目设置,在输入项可以看到一个操作映射,一个轴映射是用于,跳跃之类按一次即可执行完的动作,轴映射适合向一个方向移动这样需要长按按键才能取得想要效果的按键,所以控制移动,一般是选择轴映射,

虚幻4C++核心类pawn类,解读_第4张图片
点击加号添加一个轴映射
虚幻4C++核心类pawn类,解读_第5张图片
然后在添加的轴映射MoveForward里添加,需要控制pawn的操作,比如W和S,后面的缩放表示传入的数据最小到最大的的缩放倍数,比如程序里规定速度是100,按下W:1.0就是100,按下S:-1.0就是-100,达到了往相反方向移动的作用
虚幻4C++核心类pawn类,解读_第6张图片
这样就是绑定好了轴映射,接下来就需要在C++代码写上对应不同按键的处理函数

创建一个叫MaxSpeed的向量类型表示速度,在构造函数里默认初始化为100,可以把他它暴露给编辑器外部,在外部修改
在这里插入图片描述

函数定义虚幻4C++核心类pawn类,解读_第7张图片
函数实现,这是左右移动的函数,所以只需要获得到移动后的x,可以通过FMath::Clamp数学函数把value的值限制在-1.0和1.0之间,就不会出现超出限制的范围,根据传入的缩放value乘速度MaxSpeed就等于要移动的路程
在这里插入图片描述
那么轴映射和这个处理函数是怎么关联起来的,这个时候就要用到pawn类特有的默认SetupPlayerInputComponent函数
虚幻4C++核心类pawn类,解读_第8张图片
在这个函数里通过传入的PlayerInputComponent玩家输入组件指针可以设置函数和对应的轴映射操作绑定

这样BindAxis传入一个TEXT文本写明对应的轴映射,执行的对象,&处理函数就使得项目里设置的轴映射和我们创建的处理函数绑定起来了。这样轴映射里设置的缩放倍数,就会传入我们设置的value里

PlayerInputComponent->BindAxis(TEXT("MoveForward"), this, &AMyPawn::MoveForward);

于是一旦按下ws我们设置的轴映射键,马上就在我们自己定义的函数中获得遇到移动的向量
在这里插入图片描述
这个时候只需要,在Tick函数里去设置上就行,设置的时候需要乘上每帧的时间差Deltatime,这样就不会因为帧数不稳定造成忽快忽慢虚幻4C++核心类pawn类,解读_第9张图片

官方建议:您可以在 Pawn 中处理所有输入, 尤其是不太复杂的情况下。但是,如果您的需求非常复杂,比如在一个游戏客户端上的多玩家、或实时地动态修改角色的功能,那么最好 PlayerController中处理输入。在这种情况中,PlayerController决定要干什么,然后将命令(比如"开始蹲伏"、“跳跃”)发布给Pawn。

你可能感兴趣的:(虚幻C++,c++,游戏引擎,游戏开发)