如何设置自定义日志_RPG游戏开发日志1:设置自定义角色和动画

本项目上传在coding上,读者朋友们可以通过在coding下载项目。

coding地址:https://git.dev.tencent.com/JeremyBrett/uRPG.git

我们首先搞定角色的基础行为的操作,这里我们用第三人称模板新建项目。

需求分析

首先我们要搞清楚我们需求的角色移动方式是怎么样的:

1、按键wsad控制角色向前后左右四个方向移动

2、按住鼠标右键可以以角色为中心旋转摄像机

动画状态机设置

我们在mixamo下载一个角色,并下载法师的动作包。角色长这样:

1066255eaf65ecb5c3bb9f5ab51adf4c.png
模型展示

导入,不需要更改什么选项:

25fcd97c4b446f22de0a1ed72c4e720f.png
导入

之后我们整理一下目录结构:

61fb5532562a6f7695ce04b4ae9b331f.png
character目录结构

然后我们将Attack相关的动作全选并批量创建动画蒙太奇:

71c84582e582544e0861e0403e996af7.png
创建动画蒙太奇

在之后我们创建一个移动的1D的混合空间,并命名为Bs_IdleWalkRun:

0ec8a4c3606526391b9d6c0556c646b7.png
创建混合空间1D

水平坐标取名speed:

b5994524007b86d583ce6319e6c75128.png
水平坐标

然后拖动3个动作加入到这里如下图所示,拖动绿点可以在上方预览效果:

822f4bd4277fa841b9f51b8bef0fe59e.png
动作设置

然后我们创建一个动画蓝图,取名就叫做AniBp_Eve。点开动画状态机,分别添加一个slot和一个状态机。slot在之后使用动画蒙太奇时候再讲。先看状态机:

6c51877aa7ef291dd223567772ccbb5d.png
添加一个Slot和States

进入状态机,这里我们新建一个状态,就是Idle和run状态:

c7229f767b8c3aca34666196ccd2c439.png
iidle状态

这个状态很简单,就是将我们刚创建的BS添加到这里,并把speed参数作为变量保存起来,如下图所示:

ded3935d1587a0a54c084c50b0bd3452.png
Bs链接

在事件图表中,我们尝试获取到动画状态机所属的Pawn,并且获取到其速度,将这个速度赋值给上文中所说的Speed变量,就可以了。

44ef7dd2d76fdd8ec231ff22eca901d4.png
设置速度

然后,我们复制一个ThirdPersonCharacter,取名叫做BP_CharacterBase,并将Mesh设为我们在自己的模型和动作。

894093dd11d0e491e9343cadc9d9ba0a.png
设置Mesh

控制器与摄像机设置

好的我们新建一个控制器蓝图,取名叫做BP_PlayerController。

在此之前,我们先设置一下项目的输入:

51f059c0726ba749bdd910525d42e7fe.png
输入设置

现在我们可以将BP_CharacterBase蓝图中的代码清空,并且将CameraSettings这里全部取消勾选,这里如果不清楚效果可以勾选之后运行一下比较一下差异就懂了。

0b615fad28450ae125942069a7e719aa.png
CameraSettings

再然后我们将TargetArmLength拉远,并且设置一个Y轴的-45°的旋转,这样看起来会有一个向下的俯视效果,也是我比较习惯的游戏角度(是的,就是WowLike)

219920ef753f09a3d5ff6a8459410f2f.png
将TargetArmLength拉远

然后打开角色控制器,首先修改一下MouseInterface如下图所示:

996748242de728822af2752be59f3f29.png
MouseInterface

在BeginPlay事件中,我们获取到控制的Pawn,并将其存储在一个引用变量中,这里我将变量取名为Ref_ControlledCharacter(我习惯于将引用类型的变量标记Ref_前缀,这样方便查找和管理)。

5289c4a2eb43c174089fac454de0084d.png
Character引用

然后,当我们按下鼠标右键的时候,表示可以旋转,我们用一个布尔值变量记录当前能否旋转的状态。

650aaf8a0026d7f85b4d10bb476dbdcb.png
能否旋转

然后是镜头的上下、左右旋转,这个也比较简单,先看上下移动,首先我们需要判断一下当前是否可以旋转镜头,并且输入值是否不为0,只有当这两个条件同时满足时候才进行之后的操作

1937625476189dd4502c5f75fa2e2a68.png
Lookup判断

操作的内容也很简单,首先获取到角色蓝图中CameraBoom的Transform,然后旋转其Y坐标,旋转的值就是原值+输入值,注意这个Clamp节点,让旋转之后的值在一个区间之内,避免出现旋转过头的情况。当然,这个区间是我们可以调整的。之后将这个值MakeRotator并传入给CameraBoom调用的SetRelativeRotation方法即可

cc4cc91568c2d4ffe2e0cb0841222c7b.png
Lookup操作

左右旋转的操作同理,唯一的区别就在于左右旋转并不需要在一个区间内:

21dc8f090bcd26a1827c934df31405f9.png
Turn操作

处理了镜头旋转,现在开始搞定移动,这里只贴出MoveForward的操作,MoveRight同理。首先判断输入值是否不为零,如果不为零就执行移动操作,这里的移动操作依然是获取当前摄像机的角度,然后根据角度和输入的值来决定角色的移动方向和移动值。

4d9b2064d7f16e5db31b7fd52ca9739e.png
MoveForward操作

BUG解决及优化

值得注意的是BP_CharacterBase的CharacterMovement组件的OrientRotationtoMovement需要勾选

522bc656c2f6149bf829df221504ac38.png
勾选OrientRotationtoMovement

并且BP_CharacterBase默认值中UseControllerRotationYaw需要取消勾选:

fcda6bc1ecf2f38c816d65b6f2a6e91f.png
取消勾选UseControllerRotationYaw

运行,测试,完美。好的,这样这一期的任务就完成了。我们下期,再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值