美文网首页UE4制作沙盒RPG
RPG游戏开发日志1:设置自定义角色和动画

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

作者: 李维民0512 | 来源:发表于2019-04-06 00:54 被阅读0次

    本项目同步上传于github和coding上,国内读者可以通过在coding下载项目,注意本套开发日志同步的是Tutorial分支,其他分支内容可能与日志内容不符。请注意

    github地址:https://github.com/Liweimin0512/uRPG

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

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

    需求分析

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

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

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

    动画状态机设置

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

    模型展示

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

    导入

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

    character目录结构

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

    创建动画蒙太奇

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

    创建混合空间1D

    水平坐标取名speed:

    水平坐标

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

    动作设置

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

    添加一个Slot和States

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

    iidle状态

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

    Bs链接

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

    设置速度

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

    设置Mesh

    控制器与摄像机设置

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

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

    输入设置

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

    CameraSettings

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

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

    MouseInterface

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

    Character引用

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

    能否旋转

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

    Lookup判断

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

    Lookup操作

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

    Turn操作

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

    MoveForward操作

    BUG解决及优化

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

    勾选OrientRotationtoMovement

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

    取消勾选UseControllerRotationYaw

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

    相关文章

      网友评论

        本文标题:RPG游戏开发日志1:设置自定义角色和动画

        本文链接:https://www.haomeiwen.com/subject/ptqliqtx.html