UE4 MovementComponent学习笔记(一)

4

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-1-7 18:56:40 | 显示全部楼层
这阵子因为工作的原因对UE4内设的这些运动组件都有一些了解,这次写下来进行一个总结同时加深对运动组件的认识。学习UE4没多久,会有写错的地方,望各路大神多提建议,谢谢。
版本:4.27.2



继承一览

  如图所示,UE内置提供了五种移动组件用于不同种类的移动方式。Projectile是朝着一个方向发射可用于子弹、乒乓球等球类物体;Rotating用于绕着某个物体旋转或者自旋,可以是风扇的扇叶;地球;Interp用于点与点之间的移动,可以是多个点之间的移动,可用于AI简单移动;还有就是Pawn和Character的移动组件,FloatingPawn如名字所示是没有重力的,内部是简单的处理输入与速度的组件,Character比较复杂,UE内置了多种移动模式,包括了走、掉落、游泳等,还可以自己开发其他移动模式,这个我暂时还没研究太明白了,等我搞明白了,再总结。
  MovementComponent

  先说UMovementComponent,作为一个抽象类,它搭建了一个基本的运动框架,为所有的简单运动都设置了虚函数;实现了位置更新的inline函数,所有子类的移动组件最后计算出该帧当前物体更新的位置时都要调用这些函数用于更新位置;



SourceCode

实现了移动限制,可以将所有移动限制在一个平面上(Planar Movement Constraint),可以用于2D游戏;



平面限制

  此外,最关键的是提供了最重要的两个成员变量就是Velocity和UpdatedComponent,Velocity控制了物体的移动速度,子类组件在tick最后时基本都会调用该类的UpdateComponentVelocity()来更新计算后UpdatedComponent的速度,还有一个UpdateComponent是当前物体的根组件(根组件一般设置为碰撞体,用于碰撞计算),默认可以自动获取到当前Actor的根组件。



SourceCode



SourceCode

  UProjectileMovementComponent

  该组件主要有四个功能:反弹、模拟(细化每一帧内的移动)、追踪、插值(主要用于网络通信)。



抛射物组件的基本属性

  该栏是抛射物运动组件的基本属性,用于控制抛射物的速度,rotation follows velocity可以控制物体跟着速度的方向进行旋转,rotation remains vertical可以控制物体的旋转保持水平平衡,projectile gravity scale(重力值)可为负数(Z轴正向),但是不能设置为其他方向,因为在内部每帧计算加速度时,重力的方向写死了。。。。。



看到这里时真的很无语,重力就这么设置了

  反弹是在根组件为碰撞体的情况下,根据hitResult计算出反弹的方向(反弹的方向是光的反射方向,以Normal Impact为法线),其中可以设置速度的损失,静摩擦力,也可以设置再反弹后低于设定的速度时停止反弹,在组件中内置了两个blueprintAssignable的函数,用于调用分别是碰撞时和停止运动时。


  模拟是用于在物体速度过大前提下,为了防止一帧更新的位移超过了该碰撞物体的表面,于是可以设置可以在帧内多次模拟位移的变化,防止穿过物体。


  除了反弹之外抛射物组件还有追踪的功能,可以在runtime下设置追踪的物体的根组件,勾选Is Homing Projectile,便可追踪物体(方便用于追踪目标攻击的技能),Homing Acceleration Magnitude可以调整变化的数值大小。

回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表