[UE4虚幻引擎教程]-003-游戏框架的基本概念:第一个玩家控制器

[UE4虚幻引擎教程]-003-游戏框架的基本概念:第一个玩家控制器,第1张

前排看文档啦,看懂了就不用看下面这些废话啦: https://docs.unrealengine.com/latest/CHN/Gameplay/Framework/index.html

来咱先看个简单的例子:

以上的例子是不是简单明了一看就懂呢?(并不……)

好吧没事以后就慢慢懂了,来我们一起动手做一遍吧……

实战部分:

注:学习本节你至少得知道引擎的界面吧……

再注:使用引擎自带模板 ThirdPerson 进行参考,人家蓝图里都写着呢……

再再注:推荐学习: 3小时速攻UE4

然后让我们打开上一节创建的工程,在对象浏览器中点击右键创建一个新的文件夹,起名为BluePrints,然后分别创建一个GameMode,一个PlayController和一个Character,记得规范命名哦,蓝图前面都带上BP前缀。

然后在设置中打开世界设置,在世界设置面板中指定新建好的GameMode,playcontroller和character。此时点击播放运行,如果设置正确的话会发现无法旋转视角和移动。在这里需要注意的一点是,可以为整个游戏设定同一个GameMode,也可以单独为一个场景设置GameMode,而且在发布程序的时候,需要在:编辑》项目设置》地图模式》中指定GameMode和开始时的场景。

OK,现在来进行输入控制吧,打开 编辑》项目设置》输入 ,点击Axis Mappings选项后的加号,创建输入映射,起名为Turn,选择对应输入为鼠标X,再创建一个映射,起名为LookUp,选择鼠标Y,并设置为-1。

关于此处映射,其实就是一个总体设定,方便以后的多输入支持,比如绑定鼠标输入和手柄输入之类的,如果不懂,可以看文档这里: 输入

双击建好的Character,在事件图表中框选默认的事件,按delete删除,然后右击输入trun,创建之前映射好的输入Trun事件,再拖拽出新节点,输入Add Controller Yaw Input,创建节点,并将输入事件的值拖拽连接到Input节点的值上,如法创建LookUp事件,并连接Add Controller Pitch Input节点,最后选中所有节点,按C创建注释面板,添加注释以便识别。这时候点击编译,再关闭面板,然后播放场景,就会发现鼠标可以控制视角改变了。

而关于Add Controller Yaw Input是什么鬼呢,再来看文档吧: Pawn Input

再次创建输入映射,创建一个MoveFrward和一个MoveRight,如图,注意值

然后来看输入的蓝图,首先通过 Get Control Rotation 获取到旋转的值,这个值是个Rotator三维向量,由于我们只需要Z轴方向的值,所以需要break解开,再Make组成一个新的Rotator值, Get forward Vector  获取到当前面向的正面方向,再通过Add Movement Input增加该方向的值,就完成了向前移动。

最后运行,就能自由移动和旋转视角了,记得把地形改大点哟,不然掉下去就得重来了。

角色的创建:

由于我们一开始创建的是Character模型,自带的mesh组件只能丢个特定的人形模型上去,于是我们再给他添加一个static mesh,然后随便丢个啥玩意上去,我扔了个圆锥……调整合适的大小,至少在包裹的碰撞盒内吧……意思意思一下就行。

运行一下,转动下视角,你会发现能看到有东西了,再回到character里,添加个 springArm ,然后将相机拖到下面,再勾选个使用pawn controller Rotation(此处很重要),如果你要玩第三人称,距离就远点,第一人称,就设成0,约莫就酱紫了……

好,最后闲得无聊的我给Character加了俩棒子,就当这就是手了……记得加到arm下,这样可以跟着视角旋转。

啊对了我们是不是忘记PlayController了?主要是写多了怕你们消化不良,所以咱就简单加个功能吧,比如……HelloWord?

来在输入中添加个动作映射,记得是Action Mappings,不是Axis哟,我比较习惯用F,其他的你看着办了,然后打开PlayController,拖出节点,连个print,再运行,按F,屏幕上就出现Hello了。

哈哈哈哈哈这篇文章是不是很简单很强大发现一看就会呢,其实就是天天加班没时间好好写而已啦(就是懒),好吧其实这个真的是基础中的基础没啥好讲的,下一篇的会比较多的实 *** ,做一些无聊的小功能啦,亲们可以先去看下蓝图的使用,作者估计就是一个动图,一个蓝图截图就讲一个模块啦,所以可以先预习下,就酱,诸君晚安……

1.导入mesh和Animation

2.设置角色按键控制

3.赋予材质(可有可无)

4.混合空间——Blend Spaces

选择骨架,轴名称为speed,最大值为375,将idle,walk,run拖拽到轴上

5.动画蓝图

6.状态机——State Machines

优酷LG堂 介绍状态机器的使用- Intro to State Machines

在动画蓝图里添加状态机

添加Jump 状态

分别设置JumpStart,JumpLoop,JumpEnd中的状态和条件

由Start→Loop的条件是near end of start Animation

这个节点将动画时间比例化,从1到0。

所以当动画的比例小于0.1的时候,播放Loop的动画。

最后一个JumpEnd→Idle_walk_run同理start→Loop

这时候通过测试

发现动作不连贯,调整ratio判断的值,这里我设置为0.5和0.8,动作流畅。

7.在动作蓝图里创建事件图表

Event Blueprint Update Animation节点用于对所有的动画数据进行调用和更新

Is Valid节点,检查是否有效,再往下执行(这一步我理解就是类似程序执行前的检查)

Try Get Pawn Owner节点,用于检测是什么物体正在被 *** 控

Get Movement Component 获得角色动作的数据比如,走,跑,飞……

Is Falling判断是否处于空中

Get Velocity 节点获取速度(矢量,方向+数值),向量长度表示速度speed

Vector Length 获取长度,连到speed

8.设置角色蓝图

9.创建角色的键盘和鼠标控制

添加MoveForward事件

添加add Movement Input节点与MoveForward连接

添加GetActorRotation节点,获取角色的旋转值

添加Break Rotator打断旋转(将旋转细分)

pitch俯仰角

yaw偏航角

roll翻滚角

鼠标的移动会使这三个角发生变化,在角色行走的时候只需要用到Yaw,Yaw控制角色的朝向

Make Rotator节点是为了让,pitch,row归零,只输出偏航角

利用GetForward Vector节点输出向前的向量

选中所有节点按C键,添加注释为Mouse movement input

10.游戏模式与按键 *** 控测试

在项目设置里选择地图&模式

将Defualt GameMode 设置为 MyGame

测试没有问题

(我觉得反转视角的 *** 作有点反人类,就不写了,很简单只需要把项目设置中的LookUp设置为-1就行,还有手柄和触摸屏也不介绍了)

10.动作蒙太奇Animation Montage

Animation Montage 可以用现有的动作组合成新的动作

把已有的动作重复播放(使用),有选择的播放需要的动画

例如:霰dq上d *** 作,打开q膛,装填+装填+装填……,合上q膛。装填就是一个重复的动作,运用动作蒙太奇可以根据子d数量来设置装填动作的循环次数

我们将要制作的是打拳Punching的蒙太奇,五个素材分别是:

Punchstart,Punch1(出右拳),Punch2(出左拳),PunchEnd1(收右拳),PunchEnd2(收左拳)

按住鼠标左键不放,PunchStart→Punch1→Punch2→Punch1→Punch2→Punch1→Punch2……

松开后要进行判断此时出拳的动作是Punch1还是Punch2,来执行相应的结束动作

11.骨骼对位Skeleton Retargeting

创建动作蒙太奇,命名为PunchMontage

给动画分段:

解释一下这步 *** 作,点击第一行的PunchStart,变黄色,点击上面的Punch1,点击第一行的Punch1,点击上面的Punch2,点击第一行的Punch2,点击上面的Punch1,这是系统自动识别我们需要Punch1,Punch2循环

(这一块我并不是十分理解)

12.使用动作蓝图设置角色击拳

在CharacterBP中编辑:

打开Character Animation BP(动画蓝图)

现在需要获取并设置IsPunching?的值

但是我们现在无法直接通过Get Pawn Owner节点获取它的IsPunching?的值

需要用到Cast to 节点

官方文档中写道:

在  蓝图  中使用  Cast To  节点时,简单而言,就是在尝试检查发出转换的对象是否为被转换的特定对象。换言之,您创建了一个特殊的角色蓝图(如名为 MyCharacter),其中包含变量或其他自定义功能,并将其作为默认 Pawn 类(或所有玩家角色默认使用的角色蓝图)指定。

如需从另一个蓝图访问玩家角色的属性,可使用  Get Player Character  节点以常规方式(设置/获取其位置、旋转灯)对玩家角色产生影响,但无法访问已添加到 MyCharacter 蓝图的自定义功能,因为您获取的是玩家角色而非特定类型的角色。

使用  Get Player Character  节点,再使用  Cast To MyCharacter  节点(特殊的角色蓝图),即可确认玩家角色是否为 MyCharacter,以便访问该蓝图中所包含的变量、函数、事件或其他特殊功能。

这里我们需要从CharacterBP中获取IsPunching? 的值

13.实现蒙太奇动作的运行

在角色动画蓝图中

In Play Rate节点同样可以蒙太奇播放的速度

IsPunching?为真 时执行do once节点(该节点目的是只执行一次,如果直接连接到Punch节点上,会导致点击鼠标左键后,一直重复执行Punch动作)

IsPunching?为假 时重置

在蓝图中添加蒙太奇通知事件

获取 IsPunching? 的值

当数据为假时,连接Montage Set Next Section节点,依次判断结束动作

接下来设置动画图表,实现对蒙太奇数据的调用

运行发现,角色在移动过程中拳击,无跑步姿势

在动画图表中

locomotion不能同时连接到Base Pose和UpperBody上

14.添加击拳物理判定

打开CharacterBP视口


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11927816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存