【问题标题】:Rotating an object till it's in line with two other objects旋转一个对象,直到它与其他两个对象对齐
【发布时间】:2017-12-11 23:34:36
【问题描述】:

从下图中,我想将游戏对象 C 围绕另一个对象 A 旋转(角度 d 到位置 p1),直到 C 在给定时间段内连接对象 A 和 B 的位置的同一条线上。请注意,角度 d 和点 p1 是未知的。我怎样才能做到这一点?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    您可以使用以下功能:

    var point = A.transform.position;
    var axis = new Vector3(0,0,1);
    var angle = d;
    B.transform.RotateAround(point, axis, angle);
    

    更新: 如果角度d未知,请使用下面的sn-p:

    public GameObject A, B, C;
    public bool RotateDone = false;
    
    void Update () {
        if (!RotateDone)
        {
            var v1 = B.transform.position - A.transform.position;
            var v2 = C.transform.position - A.transform.position;
            var angle = Vector3.Angle(v1, v2);
    
            if (angle < 1)
                RotateDone = true;
            else
                B.transform.RotateAround(A.transform.position, new Vector3(0, 0, 1), -0.5f);
        }
    }
    

    【讨论】:

    • 对不起,我忘了说角度 d 是未知的。我刚刚更新了问题。
    【解决方案2】:

    您可以使用第四个对象“D”来做到这一点。

    1. 实例化第四个对象“D”
    2. 将此“D”对象置于“A”位置
    3. "D" 对象 .LookAt 设为 "C"
    4. 使 "C" 成为 "D" 的子级
    5. "D" .LookAt 设为 "B"
    6. 使 "C" 再次成为无父对象(或将其先前的父对象设置为它)
    7. 摧毁“D”
    8. 成功。

    【讨论】:

    • 这行得通,但是一点向量数学可以避免垃圾收集。
    • 你可以重用对象“D”:p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多