Камера как единое целое следует за мячом без прокрутки камеры - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над игрой в гольф в единстве, где у меня есть камера, вращающая мяч по орбите на основе ввода мыши x и y. Код контроллера камеры работает нормально, пока я не начинаю прикладывать силу к мячу. См. Код контроллера камеры ниже:

void ControlCamera() 
{
    // Do Nothing if Locked
    if (cameraLocked)
        return;

    // Handle Zoom
    myCamera.transform.position = Vector3.MoveTowards(myCamera.transform.position, transform.position, Input.mouseScrollDelta.y);

    // Handle Y Transformation
    Transform yTransform = myCamera.transform;
    yTransform.RotateAround(transform.position, Vector3.left, Input.GetAxis("Mouse Y") * cameraSensitivity);
    if (yTransform.rotation.eulerAngles.x < maxXRot && yTransform.rotation.eulerAngles.x > minXRot)
    {
        myCamera.transform.rotation = yTransform.rotation;
        myCamera.transform.position = yTransform.position;
    }

    // Handle X Transformation
    myCamera.transform.RotateAround(transform.position, Vector3.down, Input.GetAxis("Mouse X") * cameraSensitivity);

    // Prevent Z Skew
    Quaternion currentRotation = myCamera.transform.rotation;
    float xRot = currentRotation.eulerAngles.x;
    float yRot = currentRotation.eulerAngles.y;
    currentRotation.eulerAngles = new Vector3(xRot, yRot, 0);
    myCamera.transform.rotation = currentRotation;
}

Объект камеры является дочерним по отношению к объекту шара и катится вместе с мячом при приложении силы. Я попытался отделить объект камеры от объекта шара, который разбивает объект камеры (он больше не следует за мячом, потому что это больше не ребенок).

Есть идеи, как я могу сохранить этот код красивым и простым, как он есть сейчас, и предотвратить перекатывание камеры, продолжая следить за мячом?

1 Ответ

2 голосов
/ 29 мая 2020

Одним из решений может быть наличие внутри шара gameObject 2 дочерних элементов, один с шаром, который будет вращаться, а другой с камерой. Таким образом, камера будет следовать за родительским gameObject, который не вращается (но вы должны обновить положение).

Другой, и тот, который мне нравится больше всего, - не дочерняя камера на в мяч gameObject, просто обновите положение камеры, исходя из положения мяча, ТОЛЬКО положение, а не вращение. Что-то вроде:

public class CameraFollow : MonoBehaviour 
{
      public GameObject ball;

      void Update() 
      {
          Vector3 pos = ball.transform.position;
          transform.position = pos;
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...