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的思路:

  1. 创建gamemode资源,设定默认地图相关;设定input相关,即各种input控制快捷键设定;设定默认game mode(project setting里面)
  2. 创建主角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的旋转;
  3. 创建一个Animation blueprint资源(会让你在创建时候选择使用哪个skeletal mesh,选择后,这个skeletal mesh的所有资源,包括sequence动画序列,自己创建的blend space都会自动和这个animation blueprint发生关联),并且将其设定到2中主角 character class blueprint的Skeletal mesh的detail里面;
  4. 修改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》的更多相关文章

  1. 《Note --- Unreal 4 --- matinee》

    https://docs.unrealengine.com/latest/CHN/Engine/Matinee/index.html https://docs.unrealengine.com/lat ...

  2. 《Note --- Unreal --- MemPro (CONTINUE... ...)》

    Mem pro 是一个主要集成内存泄露检测的工具,其具有自身的源码和GUI,在GUI中利用"Launch" button进行加载自己待检测的application,目前支持的平台为 ...

  3. 《Note --- Unreal 4 --- Sample analyze --- StrategyGame(continue...)》

    ---------------------------------------------------------------------------------------------------- ...

  4. 《Note --- Unreal 4 --- behavior tree》

    Web: https://docs.unrealengine.com/latest/INT/Engine/AI/BehaviorTrees/index.html Test project: D:\En ...

  5. 《Note --- Unreal 4 --- B project --- Second UV issue》

    Second uv 可以通过editor来生成: 这部分内容都是在staticMeshEditor这个文件夹下面的代码里: 关于UI的相应机制,有个文件UICommandList.cpp例如我点击st ...

  6. 《Velocity 模板使用指南》中文版[转]

    转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607931.aspx <Velocity 模板使用指南>中文版 源文见 htt ...

  7. 《程序设计中的组合数学》——polya计数

    我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...

  8. 《how to design programs》12章函数复合

    我们写代码时要学会适应辅助函数.作者提出了一个问题,如何对一个表排序.排序函数读取一个表,产生另一个表.排序函数的合约和用途如下: (sort empty) ;; expected value: em ...

  9. 《Oracle Applications DBA 基础》- 9 - Concurrent Processing[Z]

    <Oracle Applications DBA 基础>- 9 - Concurrent Processing================================== 参考资料 ...

随机推荐

  1. javaScript语法总结

    一:语法 JavaScript:一种基于对象和事件驱动得客户端脚本语言: 由下面三者组成: 1,ECMAScript(一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer ...

  2. JS作用域面试题总结

    关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量) ...

  3. T-SQL:毕业生出门需知系列(九)

    <SQL 必知必会>读书笔记 -- 第9课 汇总数据 9.1 聚集函数:对某些行运行的函数,计算并返回一个值 案例: -- 确定表中函数 -- 获得表中某些行的和 -- 找出表列的最大值. ...

  4. JVM学习(1)——通过实例总结Java虚拟机的运行机制

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: JVM的历史 JVM的运行流程简介 JVM的组成(基于 Java 7) JVM调优参数:-Xmx和-Xms ...

  5. 1元搭建自己的云服务器&解析域名

    最近在学做微信开发,没有自己的域名和服务器就不得不寄人篱下,索性自己就到云主机上搭建了个服务器,但是水平有限弄了一个下午~~有自己的域名和服务器的好处相信不用我多说了.比如日后可以有自己域名的个性博客 ...

  6. 一点做用户画像的人生经验(一):ID强打通

    1. 背景 在构建精准用户画像时,面临着这样一个问题:日志采集不能成功地收集用户的所有ID,且每条业务线有各自定义的UID用来标识用户,从而造成了用户ID的零碎化.因此,为了做用户标签的整合,用户ID ...

  7. 轻量级OLAP(二):Hive + Elasticsearch

    1. 引言 在做OLAP数据分析时,常常会遇到过滤分析需求,比如:除去只有性别.常驻地标签的用户,计算广告媒体上的覆盖UV.OLAP解决方案Kylin不支持复杂数据类型(array.struct.ma ...

  8. 【那些年关于java多态应用】

    1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal { public abstract void Say();} 子类: public class ...

  9. STM32F746的RTC使用

    1.RTC模块采用低速晶振外接始终:32.768KHz,如下图所示 2.配置RTC模块: 其中,Fck_apre.Fck_spre始终上配置不容易理解, 如果想得到1Hz的始终频率,则需要将PERDI ...

  10. .NET 实现并行的几种方式(二)

    本随笔续接:.NET 实现并行的几种方式(一) 四.Task 3)Task.NET 4.5 中的简易方式 在上篇随笔中,两个Demo使用的是 .NET 4.0 中的方式,代码写起来略显麻烦,这不 .N ...