Получите разницу между поворотами и позициями - PullRequest
0 голосов
/ 13 марта 2019

У меня есть два объекта в Мировом Пространстве. У одного куба нет родителя. Второй - это треугольник, и у него есть родитель. Я изменяю положение куба и вращение. И теперь мне нужно поместить куб в его первую позицию, но переместить треугольник в родительском (локальном) положении таким образом, чтобы соответствовать той же позиции, как если бы куб не был помещен в предыдущую позицию.

enter image description here

1 Ответ

1 голос
/ 13 марта 2019
  1. Где-то хранится исходное положение и поворот cube

    Vector3 origPosition = cube.transform.position;
    Quaternion origRotation = cube.transform.rotation;
    
  2. Получить значения смещения между кубом и треугольником

    Vector3 posOffset = triangle.transform.position - cube.transform.position;
    Quaternion rotOffset = Quaternion.Inverse(cube.transform.rotation) * triangle.transform.rotation;
    
  3. (Re) Установить куб и треугольник на место

    cube.transform.position = origPosition;
    cube.transform.rotation = origRotation;
    
    triangle.transform.position = origPosition + posOffset;
    triangle.transform.rotation = origRotation * rotOffset;
    

Пример

public class CubeMover : MonoBehaviour
{
    public Transform cube;
    public Transform triangle;

    private Vector3 origPosition;
    private Quaternion origRotation;

    // Start is called before the first frame update
    private void Start()
    {
        origPosition = cube.transform.position;
        origRotation = cube.transform.rotation;
    }

    [ContextMenu("Test")]
    public void ResetCube()
    {
        Vector3 posOffset = triangle.transform.position - cube.transform.position;
        Quaternion rotOffset = Quaternion.Inverse(cube.transform.rotation) * triangle.transform.rotation;


        cube.transform.position = origPosition;
        cube.transform.rotation = origRotation;

        triangle.transform.position = origPosition + posOffset;
        triangle.transform.rotation = origRotation * rotOffset;
    }
}

(Треугольника не было, поэтому я использовал Цилиндр ... Надеюсь, это хорошо для вас ^^)

enter image description here

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