如何设置自定义日志_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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值