#796 Look At Function   bp     Coordinate System     UE4     4 months ago (owner) Document
 蓝图节点【Look At Function】解释
  • Current Transform
    • 需要调整姿态的对象。UE5.3的实现中只使用了它的Location部分
  • Target Position
    • 由(TargetPos - CurrentPos)计算出一个ToTarget向量
  • Look at Vector
    • 是一根轴,这根轴带动整个对象调整姿态,直至这根轴与ToTarget对齐
    • 注意这个是Local系的一根轴,或者说是待调整姿态的对象本体系的一根轴,以其本体系描述
      • 比如:要让Cone锥尖朝向一个Box,则Look at Vector应设定为Cone的竖直Z轴,即常量(0,0,1)
  • Use Up Vector
    • 开关变量,决定是否启用下面的UpVector属性
  • Up Vector
    • 平面法线。上面计算出的ToTarget会投影到该平面,如果UpVector属性启用的话。即:旋转动作会被限定在该平面上进行。
  • Clamp Cone in Degree
    • 用于调整ToTarget向量。如果该属性>一个宏定义的Threshold值(UE5.3里是0.00001f),则会考虑调整ToTarget。
      • 当上面的Look at Vector轴与ToTarget的夹角度数超过了Clamp Cone in Degree,则将ToTarget往Look at Vector靠拢,让夹角变小,直至满足要求。
      • 当Target的运动轨迹一直使得夹角超标,则可以看到调整姿态的对象被其Look at Vector带着在一个圆锥面上运动。
从上面的描述可以看到,无论如何,该节点要达成的目标都是让Look at Vector轴与ToTarget对齐。UpVector与Clamp Cone in Degree都只是可能导致ToTarget进行调整。
至于为什么要求Look at Vector是固定的一根轴,其直觉理解就是本节点的每次计算都是从对象处于零旋转姿态的起点开始的。而Look at Vector轴也是在这个零旋转姿态下给出的轴向描述,比如:要让对象顶部去追踪一个目标的话,则Look at Vector应设定为(0,0,1),每次计算都是从零姿到Target的直接求解,即便是在一个持续追踪的运动中。如果你用GetActorUpVector()节点输出到Look at Vector,由于GetActorUpVector()的值可能一直在变化,导致Look At Function节点会认为你不同帧中想让对象零姿下的不同部位朝向目标,而Look At想要达成的效果通常是想让对象零姿下的某个固定部位一直朝向目标,因此最终导致的效果是对象不停的大幅度翻转闪烁。
 
  • → #723 旋转相关的一些思考   concept   ...   11 months ago (owner) Document