Unity Cant получить объект, чтобы посмотреть на другой объект? всегда стоит слева? - PullRequest
0 голосов
/ 26 октября 2018

Я понятия не имею, что здесь происходит, но мне нужно решение.Это очень простая задача - у меня есть пустая ячейка, которая содержит сетку якоря / тела, которую я перемещаю, используя ITween, и мне нужно, чтобы тело вращалось в направлении объекта, к которому оно движется.

Моя проблема заключается в моейарматура внутри моего контейнера имеет ось z вверх, и по любой причине использование любого поворота lookAt для дочерней арматуры или более крупного контейнера отключено на 90 градусов, поэтому левая сторона объекта обращена к цели.

enter image description here enter image description here

Я пробовал:

Vector3 relativePos = test.transform.position - transform.position;
        Quaternion rotation = Quaternion.LookRotation(relativePos);
        transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * 1f);

Я пытался использовать обаLookAt и iTween, никто не работает.Я знаю, что iTween работает на вращение, потому что это заставляет объект вращаться на 90 градусов по оси z (мне просто нужно, чтобы объект был направлен к цели на оси Vector3.up - где mainModel - это арматура:

 iTween.RotateTo(mainModel, iTween.Hash(
              "z", this.gameObject.transform.eulerAngles.x + 90,
              "time", 1f,
              "easetype", "easeInOutSine",
              "looptype", "pingpong"
            ));

Между или не работает, когда я заменяю LookRotation на цель, или обращен влево.

Как мне сместить LookRotation на 90 градусов по оси вверх? Что здесь не так?

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете умножить результат LookRotation на модификацию Quaternion, чтобы компенсировать необходимое вращение. И чтобы получить лепр, вы можете использовать RotateTowards, чтобы установить соответствующую максимальную скорость вращения.

// Find out where we want to look    
Quaternion targetRotation = Quaternion.LookRotation(test.transform.position 
                                                    - transform.position);
targetRotation *= Quaternion.Euler(0f, 90f, 0f); // might need to be -90f


// Find out how far to rotate
float maxDegreesPerSecond = 90f; // This is your max speed for rotation in degrees/sec
float maxDegreesDelta = maxDegreesPerSecond * Time.deltaTime; 
transform.rotation = Quaternion.RotateTowards(transform.rotation,
                                                        targetRotation,
                                                        maxDegreesDelta); 

Чтобы избежать наклона вверх / вниз, вы можете обнулить направление, прежде чем вводить его в LookRotation:

// Find out where we want to look 
Vector3 targetDirection = test.transform.position - transform.position;
targetDirection = new Vector3(targetDirection.x, 0f, targetDirection.z);

Quaternion targetRotation = Quaternion.LookRotation(targetDirection);
targetRotation *= Quaternion.Euler(0f, 90f, 0f); // might need to be -90f
...