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. 后台管理UI的选择

    最近要做一个企业的OA系统,以前一直使用EasyUI,一切都好,但感觉有点土了,想换成现在流行的Bootstrap为基础的后台UI风格,想满足的条件应该达到如下几个: 1.美观.大方.简洁 2.兼容I ...

  2. OCP考点实战演练02-日常维护篇

    本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练02-日常维护篇 1.数据库体系结构和AS ...

  3. 2.C#WinForm基础Email分析器

    功能:输入Email地址,输出用户名和域名 string[] String.split(params char[] separator)(+5重载)) 返回的字符串数组包含此实例的字符串(由指定Uni ...

  4. Android GradientDrawable(shape标签定义) 静态使用和动态使用(圆角,渐变实现)

    Android GradientDrawable使用优势: 1. 快速实现一些基本图形(线,矩形,圆,椭圆,圆环) 2. 快速实现一些圆角,渐变,阴影等效果 3. 代替图片设置为View的背景 4. ...

  5. iOS关于模块化开发解决方案(纯干货)

    关于iOS模块化开发解决方案网上也有一些介绍,但真正落实在在具体的实例却很少看到,计划编写系统文章来介绍关于我对模块化解决方案的理解,里面会有包含到一些关于解耦.路由.封装.私有Pod管理等内容:并编 ...

  6. .NET Core全面扫盲贴

    标签: .NETCore Asp.NETCore 1. 前言 2. .NET Core 简介 2.1 .NET Core是什么 2.2 .NET Core的组成 2.3 .NET Core的特性 2. ...

  7. 【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表,通过 控制台 和 dotnet ef 两种 ...

  8. js的命名规范

                   js的命名规范   1.驼峰命名法:首字母是小写的,接下来的字母都以大写字符开头.例如: var testValue = 0; var oneValue = 10; 2. ...

  9. 关于fefo函数

    feof是C语言标准库函数函数,其原型在stdio.h中,其功能是检测流上的文件结束符. 函数原型: int feof(FILE *stream); 返回值:如果文件结束,则返回非0值,否则返回0 在 ...

  10. 【译】Core Java Questions and Answers【1-33】

    前言 译文链接:http://www.journaldev.com/2366/core-java-interview-questions-and-answers Java 8有哪些重要的特性 Java ...