【问题标题】:Unity: Rotate a mesh around the center of two Vector3unity:围绕两个Vector3的中心旋转一个网格
【发布时间】:2019-05-08 11:17:55
【问题描述】:

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

我用我的编辑器创建了一个主网格(即带有红色轮廓的那个)。 然后使用由白色球体表示的四个向量 3 创建第二个网格。 现在我需要在灰色球体所在的点上旋转这个网格。 与

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

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

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

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

【问题讨论】:

  • 你的Vector3应该是(Sphere1.position - Sphere2.position).normalized,所以当你找到myCenter时你已经算好了
  • 谢谢,没错。这是我的情况的正确答案。您应该将其发布为答案,以便我接受。

标签: c# unity3d


【解决方案1】:

你的Vector3 应该是(Sphere1.position - Sphere2.position).normalized,所以当你找到myCentre 时,你已经算好了

【讨论】:

    【解决方案2】:

    我有一个非常相似的问题(我想翻转一个包含立方体的关卡,但它会产生随机的东西)。

    所以,我创建了我的自定义编辑器脚本,它使父对象在子对象(您需要的中心)之间居中枢轴:

    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 是父级(您的中心)。

    在您的情况下,您应该使用名为“__PARENT”的 CenterPivotObject 和包含您的两个 Vector3 的对象,并使用编辑器脚本。

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

    【讨论】:

    • 这是一个很好的解决方案。您认为需要使用第三方脚本还是只能使用 Unity 工具?
    • 始终可以使用 Unity 工具,这个第三方在很多情况下只是最短的解决方案。对我来说,最好使用这个第三方,避免深入研究 Quaterions 和其他许多东西。这取决于你:)
    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2020-09-01
    • 2019-05-17
    • 2012-05-31
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多