Единство: вращать сетку вокруг центра двух векторов 3 - PullRequest
1 голос
/ 08 мая 2019

, как следует из названия, я пытаюсь повернуть плоскость вокруг точки, но результат не тот, который я ожидал.

enter image description here

С помощью моего редактора я создаю основную сетку (которая с красным контуром). Затем, используя четыре вектора3, представленные белыми сферами, я создаю вторую сетку. Теперь мне нужно повернуть эту сетку в точке, где находится серая сфера. С

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

Я нахожу центр двух Векторов3. Используя кнопку, я бы хотел повернуть сетку на один градус за раз. Я думал, что смогу сделать это, используя

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

но любой [Vector3], который я использую, сетка поворачивается в точку, определенную myCenter, но перемещается вправо или влево. Я не могу найти правильное значение для [Vector3]. Возможно ли, что [Vector3] нужно менять каждый раз, когда сетка перемещается на один градус? Вы можете мне помочь?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Ваш Vector3 должен быть (Sphere1.position - Sphere2.position).normalized, так что вы уже сработали, когда нашли myCentre

1 голос
/ 08 мая 2019

У меня были довольно похожие проблемы (я хотел перевернуть уровень, который содержит кубы, но он создает случайные вещи).

Итак, я создаю свой собственный скрипт редактора, который создает объект 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 - родитель (ваш центр).

В вашем случае вы должны использовать объект CenterPivotObject ove rand, который называется «__PARENT», который содержит два ваших вектора Vector3, и использовать скрипт сценария редактора.

После этого измените Vector3 (180f, 0f, 0f) вдля того, чтобы достичь вашего желания движения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...