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. Java发展历史

    1991年1月 Sun公司成立了Green项目小组,专攻智能家电的嵌入式控制系统 1991年2月 放弃C++,开发新语言,命名为"Oak" 1991年6月 JamesGosling ...

  2. Windows 10 部署Enterprise Solution 5.5

    Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...

  3. http程序接口、调用(最入门级,文末附Demo)

    HTTP协议简介 既然是基于HTTP协议开发,那么就首先要了解下HTTP协议的相关内容- 在TCP/IP体系结构中,HTTP属于应用层协议,位于TCP/IP协议的顶层.浏览Web时,浏览器通过HTTP ...

  4. 解决js动态改变dom元素属性后页面及时渲染问题

    今天实现一个进度条加载过程,dom结构其实就是两个div <div class="pbar"> <div class="ui-widget-header ...

  5. .net请求URL过长,解决方案

    <system.web> 节点下加上 <httpRuntime requestValidationMode="2.0" maxQueryStringLength= ...

  6. Visual Studio 2013 Ultimate因为CodeLens功能导致Microsoft.Alm.Shared.Remoting.RemoteContainer.dll高CPU占用率的折中解决方案

    1.为什么Microsoft.Alm.Shared.Remoting.RemoteContainer.dll的CPU占用率以及内存使用率会那么高? 在Visual Studio 2013 Ultima ...

  7. C# 系统托盘图标

    C# 系统托盘图标 WPF NotifyIcon 资料 网址: http://www.codeproject.com/Articles/36468/WPF-NotifyIcon http://www. ...

  8. bzoj2693--莫比乌斯反演+积性函数线性筛

    推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...

  9. Debian的软件包管理工具命令 (dpkg,apt-get)详解

    本文转载于:http://blog.chinaunix.net/uid-20769502-id-106056.html   1.dpkg包管理工具 dpkg --info "软件包名&quo ...

  10. springboot 学习资源推荐

    springboot 是什么?对于构建生产就绪的Spring应用程序有一个看法. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.(这是springboot的官方介绍) 我们为什么要学 ...