【问题标题】:How to rotate a local axis of an object to another object?如何将一个对象的局部轴旋转到另一个对象?
【发布时间】:2015-11-04 09:32:54
【问题描述】:

使用以下代码,我可以将局部 Z 轴旋转到另一个 GameObject。

/// <summary>
/// Faces local Z axis to another target object.
/// </summary>
/// <param name="target">Target.</param>
private void FaceTo(GameObject target){
    float damping = 0.03f;
    var lookPos = target.transform.position - transform.position;

    var rotation = Quaternion.LookRotation(lookPos);

    transform.rotation = 
         Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping); 
}

Update 方法的结果如下:

现在我需要使用另一个轴来面对对象,而不是对象的 Z 轴;例如,我会使用正 X 轴来获得这个结果:

如何修改我的脚本? 不幸的是我不知道四元数和向量的数学,我有点困惑。

【问题讨论】:

    标签: c# unity3d unityscript


    【解决方案1】:

    你可以追加另一个轮换:

    var rotation = Quaternion.LookRotation(lookPos) * Quaternion.AngleAxis(-90, Vector3.up);
    

    【讨论】:

    • 好的,想象一下使用这种方法进行一些测试,我也可以在 Y 轴上对齐吗?你能建议我一些可以研究这个的链接吗? Tnx!
    • 当然,y 轴是绕 x 轴旋转 (+90°)。这实际上只是另一种转变。您可以检查您的输入图像。没有必要包括花哨的数学。它基本上是将参考方向旋转到 z 轴的旋转。然后,LookRotation 添加另一个变换,将 z 轴旋转到目标方向。总体而言,参考方向旋转到目标方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2018-11-04
    • 2020-07-04
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多