动画蓝图 实现无缝动画一

首先需要有一套动画资源,动画资源除了购买意外,虚幻商城有一些免费的动作包,可以下载。或者去一些免费的动画资源网站会有,如果找不到合适的哔哩哔哩搜索无缝动画的教程,教程一般会提供一套跟着教程来的动画资源。我使用的就是哔哩哔哩UP主两节课恐惧症的无缝动画资源,教程也是跟着他来学的。这里贴上地址:
https://www.bilibili.com/video/BV1Jt411o7Zd?spm_id_from=333.999.0.0
拥有资源以后,首先新建文件夹,因为会有很多个动画资源需要使用,这里使用一个专门的文件夹来存放这些资源。

之后在Animation文件夹中新建几个混合空间,注意不是混合空间1D,因为动画有方向值,所以使用混合空间

Start混合空间用来存放角色开始运动的过渡动画,Loop用于存放角色开始运动的动画,Stop用于存放角色停止运动的过渡动画。
双击Start混合空间,左边的两个轴值设置如下:

水平方向为Direction用于调整角色不同方向的动画状态,State用于调整角色不同的运动状态,这套动画资源提供了行走,慢跑,奔跑三种不同的运动状态,方向则提供了0,L45,L90,L135,L180,R45,R90,R135,R180这些方向的动画,因此下面的混合状态如下:

使用到的动画则有:

在完成这些设置以后保存,则完成了Start混合空间,然后去实现Loop混合空间,同样打开Loop混合空间:

轴设置同样是Direction和State用于区分方向和运动状态。只不过这些轴数量更少,因为这里偷个懒所以没有使用8方向运动状态,使用到的动画混合状态是这个样子:

只有前,左,右三个方向,使用到的动画有:

同样保存,然后打开Stop混合空间:

这里的水平坐标是用于区分左右脚的,而不再是方向,因为停止动画分为左脚停止和右脚停止,因此这里使用的值为-1和1,代表左右脚,垂直坐标依旧为运动状态。

我们只需要-1和1两个值,因此将左右脚的停止动画分别拖放到两边就好了,用到的动画有这些:

之后同样保存。
有了这三个动画混合空间我们就完成了动作开始到动作循环再到动作停止的状态改变,我们需要使用动画状态机来实现这种动画状态的切换,我们新建动画蓝图,骨骼选择资源里的小白人。动画图表里新建一个状态机:

我们只需要从Idle到Start再到Loop再到Stop最后回到Idle的循环,这里有很多动画状态的改变是因为使用了一些更加复杂的写法实现动画的自然过渡。
首先是Idle状态:

直接把站立的动画拉过来用就好了,然后是start状态:

这里新建两个变量用来传输混合空间需要的参数,这里的StartDirection会跟后边的Direciton做区分,因此这里说明一下。
然后是Loop状态:

这里的给的参数是Direciton,区别于上面的Start Direction,状态参数则是一样的,同样将混合空间的姿势给输出出去就好了。
紧接着是停止状态:

这里新建用于区分左右脚的变量,状态同上。然后我们就完成了四种动画状态的姿势设置,接下来需要给定动画切换的条件:

这个是空闲到移动的规则,新建一个IsMove变量用于控制这个规则的切换。
加入我们只是轻轻点了一下移动键,或者不小心触碰到了,那么IsMove就会被设置,这个情况下动画状态就会从Start到Loop再到Stop最后回到Idle,这样需要跑一大圈才能返回到空闲状态,这样肯定是不合理的,为了防止这样我们设置MoveStart回到Idle状态的规则,这样我们除非是真的走进了MoveStart混合状态,不然他会立即回到Idle状态,其规则如下:

这里使用的是左右脚近相等为0,这里后面会有说明,他跟给的动画资源有关。
然后我们调整Start到Loop的规则:

我们快播放完了Start的动画就直接进入Loop状态,这没什么好说的,紧接着是Loop到Stop的状态规则:

这里IsMove为False并且左右脚的状态小于-0.8或者大于0.8,这是因为我们的Stop混合空间只有-1和1两个值,而当左右脚状态在0的时候会很奇怪,为了避免这种状态我们规定它只有快到左右两脚的时候才停止。至于左右两脚的值什么时候被设置这个后面会说到。
当我们松开移动键之后本来是会跳到Stop然后回到Idle,但假如我们这个时候再次按下移动键,状态就需要从Stop到Idle再到Loop,同样需要移动一大圈,为了避免这种情况,我们同样给Stop回到Loop状态的条件:

IsMove为True没什么好说的,这个大于0.4是因为动画资源预留了0.4秒的停止时间,当我们在0.4秒后会完全停止角色,这个时候显然不能再直接回到Loop状态,这个时候理应从Start开始,所以这里给大于0.4的时候我们才能回到Loop状态,因为这个时候的停止动画并没有完全停止。
同理,我们在Start的时候动画还没播完,但是我们松开了移动键,这个时候进入Loop再到Stop是不合适的,反之从Stop到Idle再到Start也是不合适的,因为Idle动画同样有一段时间持续所以:

这里也给了Start到Stop互相切换的条件,从Start到Stop条件为:

跟停止条件很相似,而Stop到Start的条件则是上面说的,状态移动到Stop但是我们在这个状态立即按下移动键了,这个时候我们需要看角色是否完全停止了,条件如下:

最后,Stop到Idle的条件就是播放完动画就跳过去:

至此,我们完成了动画状态的设置,同样也给了动画过渡的条件,我们打开蓝图页面用来设置这些需要的变量:

我们在蓝图页面拿到角色蓝图,把它存为变量,并且新建了一个浮点变量RotationDeltaTime用于辅助角色旋转,因为我们不再使用控制器的旋转,而是使用计算方向的旋转。之后我们使用一个序列:

引脚0和引脚1是这一节会用到的。进入这个Then 0折叠表:

我们拿到角色蓝图里的变量MoveAxis,这个变量是自己创建的,他是一个Vector2D,当这个向量值不为0的时候,设置Move值,这样我们完成了移动状态的设置。紧接着我们进入Then 1折叠图表:

这里使用分支来判断角色是否在移动如果在移动我们执行一个徐杰,不是则重置那个DoOnce节点,序列里执行两个变量的设置:StartDirection和Direction的计算。
这里创建了两个纯函数和一个普通函数。
GetStartDirection的设置如下:

这里用了一堆的选择节点,仅仅是因为角色开始移动的时候进入的是Start状态,这个时候如果方向计算出来不是动画资源提供的45,90这些值的话,他混合出来的动画姿势是有些奇怪的,所以这里干脆获取到方向以后重新限制他的值为动画资源支持的值。
而GetActorDirection这个函数实现如下:

这里使用了UE4提供的计算方向函数,他的方向我们只需要拿到角色的前方向和右方向,然后叠加MoveAxis轴的值,如果是正的就是正的,负的同样是负的,保证方向不会错。
最后则是辅助角色旋转的函数,当我们旋转角色的时候,因为不是使用的控制器旋转,因此旋转需要自己计算实现如下:

这里获取角色当前旋转,然后根据计算出来的Direction值创建旋转体再叠加角色本身的旋转,就能转到正确的位置,这里使用的是R插值节点来平滑旋转效果,Speed参数越高旋转越快,而这里的的DeltaTime则是之前创建的RotationDeltaTime变量的值。最后设置到角色的旋转中去即可。
最后,则是左右脚的判断,回到Then 0折叠图表中,这里还有一段补充:

在里边添加了一个执行序列,上面则是之前做的移动的条件设置,下面是用于判断当前是否在移动,如果当前是移动的状态则取寻找曲线值,用于设置左右脚,这里引出了两个东西,一个变量和一个获取曲线值,首先说变量的设置:

这里是使用了动画播放的时候的通知:

在状态节点这里可以自定义三个动画通知事件,我们只需要给事件的名字,然后编译,就能够在动画图表中调用这个事件了,这里Start状态设置的是通知当前在移动,而Loop状态则是通知不移动了,因为Stop状态是角色已经停止移动了,所以只有Loop即将进入Stop状态的时候使用通知:

这里用的是剩余事件,这样状态切换之前会通知这个事件。然后我们就完成了这个变量的值的设置。
紧接着就是第二个曲线值的设置,需要找到动画资源,打开之后我们在下方可以看到:

第一步:
创建完曲线以后我们就可以在轨道看到那条曲线了,紧接着双击那条曲线可以进入曲线编辑器:

可以看到左右脚的运动状态,我们在第一帧的位置按下鼠标中键可以添加一个关键帧,值为0,然后调整到一只脚即将落下的地方:

这里可以看到即将落下右脚,这里设置一个关键帧,右脚为1,所以值为1,紧接着进入下一个落脚帧,这样交替设置直到这个动画完成。这样我们就完成了一个动画的落脚设置。
这里值得提醒的是:
Start混合空间和Loop混合空间用到的所有动画资源全部需要设置动画曲线,这需要大量的时间和耐心,这里就慢慢设置,这样我们就得到了一个动画曲线,对应前面的获取曲线值节点。特别需要注意的是曲线的名字不能写错了,写错了获取不到值
至此,动画蓝图就设置完了,在角色蓝图里使用这个动画蓝图:


最后测试即可。

UE4 个人学习知识点记录3相关推荐

  1. R学习-知识点记录(Temp)

    前言: 此文章仅供自己使用,学习笔记记录. 视频教程学习记录: 视频地址:数据分析与R语言视频教程+课件. 书籍学习笔记: 书籍:<统计建模与R软件>(薛毅编著) R树笔记: 指数:2** ...

  2. 小甲鱼Python学习知识点记录(003讲)

    一.插曲之变量 1.变量名就像我们现实社会的名字,把一个值赋值给一个名字时,它会存储在内存中,称之为变量(variable),在大多数语言中,都把这种行为称为"给变量赋值"或&qu ...

  3. cocos2d-x学习知识点记录

    环境搭建 http://4137613.blog.51cto.com/4127613/751149 Cocos2d-x初探,HelloWorld解读 http://www.cnblogs.com/Ke ...

  4. 学习IPPS库的编码部分知识点记录

    学习IPPS库的编码部分知识点记录 1.哈夫曼编码 相关函数 IppStatus ippsDeflateHuff_8u(const Ipp8u *pLitSrc, const Ipp16u *pDis ...

  5. 计算机二级能学到知识吗,2017年关于计算机二级msoffice学习知识点

    2017年关于计算机二级msoffice学习知识点 超级计算机(Supercomputers)通常是指由数百数千甚至更多的处理器(机)组成的.能计算普通PC机和服务器不能完成的大型复杂课题的计算机.下 ...

  6. UE4入门学习3:GamePlay框架

    - - 文章 UE4入门学习3:GamePlay框架 作者 游蓝海( http://blog.csdn.net/you_lan_hai ) UE4为游戏开发提供了一套基础的框架,在这套框架的基础上,我 ...

  7. 毕业论文知识点记录(六)——基于R语言优化maxent模型

    毕业论文知识点记录(六)--基于R语言优化maxent模型 第一步:R安装 这个网上都有很多详细的步骤,就不再详细介绍了. 第二步:R安装包 因为优化maxent模型需要用到kuenm程序包,但是官网 ...

  8. CUMT学习日记——Verilog课程学习全记录

    CUMT学习日记--Verilog课程学习全记录 系列第一篇 计算机网络复习 系列第二篇 计算机组成原理复习 系列第三篇 微机原理与接口技术复习 系列第四篇 计算机操作系统复习 系列第五篇 数据库原理 ...

  9. UE4入门学习笔记——纪念学习虚幻引擎满一周年

    UE4入门学习笔记 前言: 今天是正式学习ue4一周年.一年前的今天,我结束了PBR流程的学习,怀揣着对游戏制作的热爱,正式开始学习ue4,继续追寻儿时的那个大厂梦.谁也没想到,一年后的今天,我会在T ...

最新文章

  1. phd for engineering at industry
  2. jQuery之jQuery扩展和事件
  3. java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限
  4. Ubuntu: 不显示无线连接 Can't get wireless working on Dell latitude d620
  5. Onvif开发之Linux下gsoap的使用及移植
  6. 软件测试技巧|软测经典面试题(二)
  7. 辅助驾驶等级_BBA霸榜、特斯拉折戟 E-NCAP辅助驾驶评测结果公布
  8. 如何在macOS Big Sur的Voice Memos中使用增强录音和智能文件夹?
  9. OEIS A181891
  10. 【领域建模】UML类图工具推荐
  11. 短视频jiexi客户端源代码
  12. ESP32 INMP441麦克风驱动
  13. 装修、家具设计标准尺寸参考
  14. 【数据库】数据库入门(五): 实体关系模型 (Entity-Relationship Model)
  15. 水晶报表的制作(图表)
  16. 短信字数的验证JAVA代码
  17. 分享几个在记账本中快速删除收支明细的技巧
  18. 关于jQuery中的submit事件
  19. 验房师去哪找靠谱,验房项目以及验房整改建议,精装房验房项目、毛坯房验房项目
  20. 虚荣指标 探索性指标 4种_为什么您应该避免使用虚荣指标并衡量重要问题

热门文章

  1. 上位机串口数据检验方式(二)——奇偶校验
  2. TI-C6657开发板烧录步骤
  3. iOS-关于微信支付
  4. 超详细超快的免费图床设置教程
  5. Tmux 常用快捷键
  6. 定制传承银鲨耀世,iGame Z390旗舰电竞主板品鉴
  7. 关于idea中提交svn时一直显示performing VCS refresh
  8. CF19E Fairy (奇偶环,树上差分)
  9. 只用html如何实现音乐播放,如何使用html实现音乐播放
  10. Xmind 8 pro 软件破解版