在不应用的情况下计算LookAt

时间:2019-02-07 23:15:16

标签: c# unity3d

在使用LookAt时,我需要限制骨骼的旋转。

LookAt函数的工作原理很好,但是它没有提供任何钳位的可能性,据我所知,LookAt没有提供一种方法来查看最终的旋转 而不将其应用于转换。

因此,我想知道是否有可能先计算LookAt的结果而不先应用它。

2 个答案:

答案 0 :(得分:3)

计算所需的方向向量:

Vector3 direction = bone.transform.position - targetTransform.position;

使用Quaternion.LookAt计算所需的旋转角度:

Quaternion newRotation = Quaternion.LookAt(direction);

现在执行要在提供的旋转上执行的所有数学运算,例如,如果仅想将骨骼每秒旋转最大10度,则可以执行以下操作:

newRotation = Quaternion.RotateTowards(bone.transform.rotation, newRotation, 10f * time.deltaTime);

最后,将旋转应用于骨骼:

bone.rotation = newRotation;

答案 1 :(得分:1)

仅应用LookAt,查看结果,然后应用最终旋转将结果钳位。

在帧(update函数或类似函数)中应用中间变换并不罕见。重要的是,在Update(或LateUpdateFixedUpdate)函数的末尾,转换为所需的转换。