Unity:围绕两个Vector3的中心旋转网格

时间:2019-05-08 11:17:55

标签: c# unity3d

正如标题所示,我试图绕一个点旋转一个平面,但是结果不是我所期望的。

enter image description here

使用我的编辑器创建一个主网格(带有红色轮廓的主网格)。 然后使用白色球体代表的四个vector3创建第二个网格。 现在,我需要在灰色球体的位置上旋转该网格。 使用

Vector3 myCenter = Vector3.Lerp(point1, point2, 0.5f)

我找到两个Vector3的中心。 我想使用按钮将网格一次旋转一个角度。 我以为我可以用

myMesh.transform.RotateAround(myCenter, [Vector3], 1f)

但是我使用的任何[Vector3]网格都旋转到myCenter定义的点,但是向右或向左移动。我找不到[Vector3]的正确值。 网格每次移动1度,是否可能需要更改[Vector3]? 你能帮我吗?

2 个答案:

答案 0 :(得分:1)

我有一个非常相似的问题(我想翻转一个包含多维数据集的级别,但它是随机的东西)。

因此,我创建了一个自定义编辑器脚本,该脚本创建了一个Parent对象,该对象的中心在子对象之间(您需要的中心):

using UnityEngine;
using UnityEditor;

public class CenterPivotEditor : MonoBehaviour
{
    [MenuItem("Tools/CenterPivot")]
    private static void CenterPivot()
    {
        try
        {
        GameObject __PARENT = GameObject.Find("__PARENT");
        Vector3 centroid = Vector3.zero;
        Transform[] childs = __PARENT.transform.GetComponentsInChildren<Transform>();
        foreach (Transform go in childs)
        {
            Debug.Log(go.name);
            centroid += go.position;
        }
        centroid /= (__PARENT.transform.childCount);
        GameObject centerPivotObject = new GameObject();
        centerPivotObject.name = "CenterPivotObject";            
        centerPivotObject.transform.position = centroid;

        foreach (Transform go in childs)
        {
            go.parent = centerPivotObject.transform;
        }
        DestroyImmediate(__PARENT.gameObject);

    } catch(System.NullReferenceException notfound)
    {
        Debug.Log("__PARENT not found. Can't center pivot. Please rename GameObject to __PARENT in order to CenterPivot");
    }

    }
}

在那之后,我使用DOTween来进行翻转http://dotween.demigiant.com/

m_Level.transform.DORotateQuaternion(Quaternion.Euler(new Vector3(180f, 0f, 0f)), durationFlip);

m_Level是父级(您的中心)。

在这种情况下,应使用包含两个Vector3的CenterPivotObject rand对象“ __PARENT”,并使用编辑器脚本。

然后,更改Vector3(180f,0f,0f)以实现您的运动愿望。

答案 1 :(得分:1)

您的Vector3应该是(Sphere1.position - Sphere2.position).normalized,因此,当您找到myCentre

时,就已经知道了。