Поверните родителя, чтобы ребенок смотрел в определенном направлении - PullRequest
1 голос
/ 30 сентября 2019

Объектная иерархия выглядит следующим образом:

Player
   - OVRCameraRig
       - TrackingSpace
           - CentralEyeAnchor (Camera)

По умолчанию игрок изначально направлен в правильную область, но, поскольку это в VR, кто-то может захотеть откалибровать или «раскрутить» плеер, чтобы камералицом к сцене без необходимости смотреть на это направление в реальной жизни. Это использует Oculus Quest, поэтому я хочу, чтобы смещение вращения плеера менялось, чтобы камера смотрела на сцену.

Скрипт прикреплен к Player, с vrCamera в качестве CentralEyeAnchor:

        Quaternion quat = Quaternion.Inverse(rotationOffset) * vrCamera.transform.rotation;

        Vector3 euler = quat.eulerAngles;
        euler.x = 0;
        euler.z = 0;
        transform.rotation = Quaternion.Euler(euler);

        rotationOffset = transform.rotation;

1 Ответ

1 голос
/ 30 сентября 2019

Сначала найдите относительное вращение relativeRot между камерой и плеером, такое, что playerRotation == cameraRotation * relativeRot.

Умножая обе стороны слева на Inverse(cameraRotation), мы знаем, что тогда Inverse(cameraRotation) * playerRotation == relativeRot:

Quaternion relativeRot = Quaternion.Inverse(vrCamera.transform.rotation) * transform.rotation;

Затем определите угол поворота камеры, который вам нужен. Возможно, используйте Quaternion.LookRotation в том направлении, в котором вы хотите видеть камеру:

Vector3 desiredCameraLookAtPoint;
Vector3 desiredCameraLookDirection = desiredCameraLookAtPoint - vrCamera.transform.position;
Quaternion desiredCameraRot = Quaternion.LookRotation(desiredCameraLookDirection);

Наконец, решите и назначьте вращение игрока, используя относительное вращение и желаемое вращение камеры:

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