欢迎关注《玩转UE4动画系统》系列教程 作者|开发游戏的老王
本文介绍一下Advanced Locomotion System V4 的工具函数及工具宏,一方面本部分内容是ALS V4中很多功能模块的实现基础;另一方面,我们也可以在自己的项目中复用这些工具函数和工具宏。
- 工具宏
- ML_IsDifferent(Byte)
- ML_MultiTraceHit
- ML_ComponentWorldToLocal
- ML_ComponentLocalToWorld
- ML_Transform-Transform
- ML_Transform+Transform
- ML_DoWhile(TrueFalse)
- ML_SetPreviousAndNewValue
- ML_GetNextArrayItem
- ML_GetPreviousArrayItem
- 工具函数
- GetControlForward/RightVector
- GetCalpsuleBaseLocation
- GetCapsuleLocationFromBase
- GetAnimCurveValue
下面的宏库定义在Content>AdvancedLocomotionSystemV4>Blueprints>Libraries 目录下的ALS_MacroLibrary中
ML_IsDifferent(Byte) 在Byte层级判断A和B是否相等,Inputs中的输入端A和B都是WildCard类型
Inputs中的Array是一个HitResult数组,这个宏实际就是判断该数组是否为空
将ALS_ComponentAndTransform中的Transform由世界坐标系转换成以Component的Transform为基的局部坐标系的Transform
其中ALS_ComponentAndTransform是ALS V4中定义的一个如下所示的结构体,只有两个分量Transform和Component
将ALS_ComponentAndTransform局部坐标系中的Transform转换成世界坐标系的Transform
Transform相减,实际上把两个Transform的上述对应分量值分别相减
Transform相加,实际上把两个Transform的上述对应分量值分别相加
本节点在老王的博文《虚幻引擎图文笔记:从ALS中淘宝 之 ML_DoWhile(TrueFalse)宏节点》中介绍过,本文就不再重复了
ML_SetPreviousAndNewValue 将New Value的值赋给New Target,并且使用Previous Target寄存New Target之旧的值,下面是该宏节点使用的例子。
获取下一个数组元素。如果当前元素是最后一个元素,则返回第一个元素
获取上一个数组元素。如果当前元素是第一个元素,则返回最后一个元素
下面的函数定义在Content>AdvancedLocomotionSystemV4>Blueprints>CharacterLogic 目录下的ALS_Base_CharacterBP中
GetControlForward/RightVector获取控制器的前向和右向分量。
计算角色脚底的位置即胶囊体底部的位置。注:1.使用GetWorldLocation获取到的是胶囊体中心的位置;2. ZOffset适用于微调的偏移量。
从角色脚底位置即胶囊体底部位置反算出胶囊体的Location。实际就是GetCalpsuleBaseLocation的逆运算。
安全获取动画曲线值,所谓安全就是当AnimInstance无效时,返回默认值0。