《Note --- Unreal 4 --- PersonaHowToMovement》
https://docs.unrealengine.com/latest/CHN/Gameplay/HowTo/CharacterMovement/index.html
这里的demo是按照一些persona的机制来设定玩家怎样控制一个角色来进行各种行为的;
Test Project:D:\EngineStudy\Unreal\4.14\TestProject\HowTo_CharacterMove
需要额外的角色及角色动画的资源包是:D:\EngineStudy\Unreal\AnimStarterPack 把AnimStarterPack这个文件夹放到content文件夹下面即可路径匹配;
整体demo的思路:
- 创建gamemode资源,设定默认地图相关;设定input相关,即各种input控制快捷键设定;设定默认game mode(project setting里面)
- 创建主角character class blueprint;在gamemode里面设定默认的角色class blueprint;设定主角class blueprint里面的各种资源(如skeletal mesh,camera,SpringArm等)和速度等数值;添加各种表示状态的成员变量,比如JumpPressed,CrouchPressed,DisableMovement等bool型,在其event graph里面使用“InputAction Jump”之类的节点(Jump是在设定Input里面的设定行为名字),来设定这些成员变量,供以后流程使用,设定”Character Movement”这个component节点下的类似“MaxWalkSpeed”来控制角色位置在世界空间的改变;同时event graph里面也通过“InputAxis Turn”(Turn是input里面设定的)结合“Add Controller Yaw Input”类似节点设定camera的旋转;
- 创建一个Animation blueprint资源(会让你在创建时候选择使用哪个skeletal mesh,选择后,这个skeletal mesh的所有资源,包括sequence动画序列,自己创建的blend space都会自动和这个animation blueprint发生关联),并且将其设定到2中主角 character class blueprint的Skeletal mesh的detail里面;
- 修改3中的animation blueprint,添加控制动画的成员变量,可以和2中主角character blueprint的一些成员变量对应起来,比如也加上变量“IsJumping, IsCounching”等,这些变量在event graph里面被设定,设定的值来源于获取主角character实例(TryGetPawnOwner)下的2中那些成员变量;还可以为animation blueprint里面添加额外必需的变量,比如”Speed, Direction”,这些变量将控制blend space里面的blend方式,设定这些变量的值可以通过节点“Try Get Pawn Owner---GetActorRotation/GetVelocity/CalculateDirection”等;对于animation blueprint里面的event graph,如果打开会发现有默认的“Event Blueprint Update Animation”节点,用于更新动画,逐帧调用(可能某种情况也能禁掉);
4.1. 在animation blueprint里面会发现这个skeletal mesh对应的所有动画数据都存在了,在AssetBrowser窗口里面;接下来我们创建Blend Space资源,用于混合多个动作;在创建这种资源的时候,需要提示选择哪个skeletal mesh,选择我们的主角,发现所有的动画数据(可能没有blend space类型的,都是maya里面导出来原生动画流数据);按照这个demo中的,我们将blend space的横纵坐标正分别设定为Direction和Speed,这样和我们之前animation blueprint里面的两个变量可以对应起来(这样animation blueprint里面的两个变量可以在后面设置用来传入值到blend space里面的对应两个变量,进而控制各个动画的blend 状态):

横纵轴的设定及其范围;注意横轴方向是【-180,180】,我们在向左边的格子里面拖动画sequence的时候在横轴上是以中心向两边有着逆的动画,比如横轴5个点,中间点第三个点上拖前进动画,第二个点拖左边走动画,第四个点拖右边走动画,第一个点和第五个点拖入后退动画,这5个点都是对称的,而上面5个点和下面5个点一一对应相同,因为纵轴只是速度,不需要改变动画的混合形态,只是用一种即可;
类似的,我们可能需要多个blend space资源,对于这个,其实是为了实现跑动过程中,前走后走左走右走的无缝过渡,因为这些行为不好使用状态机来控制,利用状态机无法显示无缝过渡的;另外对于前跑后跑左跑右跑动画的无缝过渡,其实也是需要space blend的;其实,对于蹲下,然后起立跑动,也可以做成space blend来实现,但是利用状态机也是可以的,蹲下à起立à跑动,这三个状态并不需要太严谨的无缝衔接过渡,所以这里也就没有这种需求做成资源;
4.2. 创建完了需要的blend space资源,回到之前定义的animation blueprint资源里面搭建状态机;这个状态机主要是用来控制各个动画之间的转换条件,如蹲下转换到站立,走路转换到静止等;
4.2.1. 右键在主要视图(AnimGraph)创建一个状态机,和Entry节点相连接;
4.2.2. 从AssetBrowser中拖入各种动画序列或者之前我们创建的blend space;如果是我们在4.1中创建的blend space动画,那么双击它可以打开其内部内容,在4.1中创建的blend space是具有成员变量的,我们此时可以将animation blueprint的成员变量(Speed和Direction)传递给它们,这样,这个blend space根据传进来的成员变量来控制其具体怎样blend;
4.2.3. 这个数据的传输使用流是这样的:主角character class blueprint来通过获取input的改变来存储一些类似于“JumpPressed,JogPressed”这样的变量;然后主角的animation blueprint的event graph视图里面通过拿到主角(指针)进而访问其内部的变量,然后将变量设给自己对应的变量,比如“IsJumping, IsJoging”这样的变量,同时也设定一些自己的其他如Speed/Direction这样的变量; 然后在状态机视图中拖入的blend space资源其内部可以使用这些animation blueprint的成员变量,把他们的值(Direction/Speed变量)传给自己这个BlendSpace的成员变量(对应的Direction/Speed)
进而控制自己这个blend space进行怎样的blend;
4.2.4. 在将各种动画序列资源拖到状态机视图里面进行搭建状态机的时候,各个状态之间的转换可以添加条件,
,着这些条件确定了是否从A状态转换到B状态,可以里面之前animation blueprint的成员变量(如”IsJumping/IsJoging”这些成员变量之前已经从主角character class blueprint里面拿到了对应的值);
4.2.5. 设定状态转换条件的时候有些节点很管用,比如
GetPlayerController---WasInputKeyJustPressed;
TimeRemaining(… …): 得到这个动画剩余时间是多少
4.3. 构建完状态机即可;
《Note --- Unreal 4 --- PersonaHowToMovement》的更多相关文章
- 《Note --- Unreal 4 --- matinee》
https://docs.unrealengine.com/latest/CHN/Engine/Matinee/index.html https://docs.unrealengine.com/lat ...
- 《Note --- Unreal --- MemPro (CONTINUE... ...)》
Mem pro 是一个主要集成内存泄露检测的工具,其具有自身的源码和GUI,在GUI中利用"Launch" button进行加载自己待检测的application,目前支持的平台为 ...
- 《Note --- Unreal 4 --- Sample analyze --- StrategyGame(continue...)》
---------------------------------------------------------------------------------------------------- ...
- 《Note --- Unreal 4 --- behavior tree》
Web: https://docs.unrealengine.com/latest/INT/Engine/AI/BehaviorTrees/index.html Test project: D:\En ...
- 《Note --- Unreal 4 --- B project --- Second UV issue》
Second uv 可以通过editor来生成: 这部分内容都是在staticMeshEditor这个文件夹下面的代码里: 关于UI的相应机制,有个文件UICommandList.cpp例如我点击st ...
- 《Velocity 模板使用指南》中文版[转]
转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607931.aspx <Velocity 模板使用指南>中文版 源文见 htt ...
- 《程序设计中的组合数学》——polya计数
我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...
- 《how to design programs》12章函数复合
我们写代码时要学会适应辅助函数.作者提出了一个问题,如何对一个表排序.排序函数读取一个表,产生另一个表.排序函数的合约和用途如下: (sort empty) ;; expected value: em ...
- 《Oracle Applications DBA 基础》- 9 - Concurrent Processing[Z]
<Oracle Applications DBA 基础>- 9 - Concurrent Processing================================== 参考资料 ...
随机推荐
- 通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id
config.yaml存储zabbix的信息(主要包括zabbix server的url .请求头部.登陆的用户名密码) Zabbix_Config: zabbix_url: http://192.1 ...
- 高性能JavaScript--数据存储(简要学习笔记二)
1.JavaScript中四种基本数据存取位置:字面量,本地变量,数组元素,对象成员. 一般来说:[字面量,局部变量]运行速度>[数组,对象成员] 2.内部属性包含了一个函数被创建的作用域中 ...
- jQuery全局Ajax事件处理器
1. .ajaxComplete( handler(event, XMLHttpRequest, ajaxOptions) ) 每当一个Ajax请求完成,jQuery就会触发ajaxComplete ...
- [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)
[入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date 周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...
- ASP.NET Core 中文文档 第三章 原理(16).NET开放Web接口(OWIN)
原文:Open Web Interface for .NET (OWIN) 作者:Steve Smith. Rick Anderson 翻译:谢炀(kiler398) 校对:孟帅洋(书缘) ASP.N ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- 数据上下文【 DnContext】【EF基础系列7】
DBContext: As you have seen in the previous Create Entity Data Model section, EDM generates the Scho ...
- 跨平台日志清理工具 Log-Cutter v2.0.1 正式发布
Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...
- Android 7.0 Nougat牛轧糖 发布啦
Android 7.0 Nougat牛轧糖 发布啦 Android 7.0 Nougat 牛轧糖于本月发布了. 从官方blog里可以了解到这个版本的新特性. Android 7.0 从2016年8月正 ...
- Android开发学习—— ContentProvider内容提供者
* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...