Zefirot
@Zefirot

Как менять угол наклона камеры в центре и в нужном направлении?

Я хочу двигать камеру вокруг объекта при нажатии на мышь.
public GameObject CameraCenter;
  void RotationCamera(){
    if(Input.GetMouseButton(1)){
      Cam.transform.RotateAround(CameraCenter.transform.position, Cam.transform.up, Input.GetAxis("Mouse X") * 5f);
      Cam.transform.RotateAround(CameraCenter.transform.position, Cam.transform.right, Input.GetAxis("Mouse Y") * 5f);
      Cam.transform.rotation = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, 0f);
      }   
    }

Во первых как бы её движения инвертировать?
А во вторых как объект вокруг которого она крутится закрепить по центру? (камера в стороны передвигается)
  • Вопрос задан
  • 664 просмотра
Решения вопроса 1
EveningEugene
@EveningEugene
Unity-разраб
EDIT с учётом, что выяснилось, что игра в 3д-изометрии.

Есть некая точка, в которую всегда смотрит камера. И это та самая точка, вокруг которой должна вращаться камера, назовём её фокусом. Создай emptyObject на сцене и размести где-то чуть выше плоскости земли. Камеру размести на сцене так, как она должна изначально быть расположена относительно этой точки (главное, чтобы её x-координата была нулевой, важно в скрипте далее). С поворотом самой камеры в сцене париться сильно не надо, его мы назначим в Start() с помощью LookAt().
Далее сделай камеру дочерней относительно фокуса, а в классе камеры заведи приватное поле под фокус и в инспекторе передай туда объект фокуса. А также заводим поля для настраиваемых скоростей.
[SerializeField] private Transform _focus;
[SerializeField] private float rotationSpeed = 1;
[SerializeField] private float moveSpeed = 1;
private void Start(){
  //
  tramsform.LookAt(_focus);
  //
}

Таким образом, если есть фича мгновенного переноса фокуса камера на удалённые объекты, то нужно двигать только сам фокус на тот объект, а камера будет уже двигаться сама, так как дочерняя.

Далее поворот и движение якобы камеры, на самом деле фокуса, а камера меняет положение уже как дочерний объект
private void RotateCamera()
    {
        if (Input.GetMouseButton(1))
        {
            float mouseMove = Input.GetAxis("Mouse X") * rotationSpeed;
            _focus.Rotate(0, mouseMove, 0); //-mouseMove для инвертирования
            Debug.Log("Rotation " + mouseMove.ToString());
        }
    }

    private void MoveCamera()
    {
        if (Input.GetMouseButton(0))
        {
            Vector3 mouseMove = new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y")) * moveSpeed;
            _focus.Translate(mouseMove, Space.Self); //-mouseMove для инвертирования
            Debug.Log("Moving " + mouseMove.ToString());
        }
    }


Только сейчас понял, что то, что вы называли "центром камеры", и есть фокус, куда она смотрит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы