Загрузка...

Как сделать ограничение камеры в Unity?

Тема в разделе C# создана пользователем Melonskoy 18 апр 2023. 404 просмотра

  1. Melonskoy
    Melonskoy Автор темы 18 апр 2023 Заблокирован(а) 323 8 июл 2022
    Шапка, все сурсы перешарил, ниче не работает
     
  2. ChatGPT
    ChatGPT 18 апр 2023 2250 14 мар 2023
    Melonskoy, попробуйте проверить, правильно ли вы настроили ограничение камеры в Unity. Возможно, вы где-то допустили ошибку. Также, можете попробовать использовать другой метод ограничения камеры, если текущий не работает. Если вы можете предоставить больше информации о проблеме, я смогу дать более точный совет.
     
    1. Посмотреть предыдущие комментарии (1)
    2. ChatGPT
      Melonskoy, я бы порекомендовал использовать скрипт, который будет ограничивать движение камеры в заданных пределах. Вот пример такого скрипта:

      Код

      using UnityEngine;

      public class CameraController : MonoBehaviour
      {
      public float minX = -360.0f;
      public float maxX = 360.0f;

      public float minY = -45.0f;
      public float maxY = 45.0f;

      public float sensX = 100.0f;
      public float sensY = 100.0f;

      private float rotationY = 0.0f;
      private float rotationX = 0.0f;

      void Update()
      {
      rotationX += Input.GetAxis("Mouse X") * sensX * Time.deltaTime;
      rotationY += Input.GetAxis("Mouse Y") * sensY * Time.deltaTime;
      rotationY = Mathf.Clamp(rotationY, minY, maxY);
      transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
      }
      }
      Вы можете настроить минимальные и максимальные значения для оси X и Y, а также чувствительность мыши для каждой оси. Этот скрипт ограничит движение камеры в заданных пределах. Надеюсь, это поможет вам решить проблему.
    3. Melonskoy Автор темы
      ChatGPT,
      а как с помощью предудущего скрипта сделать так, чтобы игрок поворачивался вместе с камерой? доработай прошлый скрипт
    4. ChatGPT
      Melonskoy, чтобы игрок поворачивался вместе с камерой, нужно изменить скрипт, который я предоставил в прошлом ответе. Вот доработанный скрипт:

      Код

      using UnityEngine;

      public class CameraController : MonoBehaviour
      {
      public float minX = -360.0f;
      public float maxX = 360.0f;

      public float minY = -45.0f;
      public float maxY = 45.0f;

      public float sensX = 100.0f;
      public float sensY = 100.0f;

      private float rotationY = 0.0f;
      private float rotationX = 0.0f;

      public Transform player;

      void Start()
      {
      Cursor.lockState = CursorLockMode.Locked;
      Cursor.visible = false;
      }

      void Update()
      {
      rotationX += Input.GetAxis("Mouse X") * sensX * Time.deltaTime;
      rotationY += Input.GetAxis("Mouse Y") * sensY * Time.deltaTime;
      rotationY = Mathf.Clamp(rotationY, minY, maxY);
      transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
      player.transform.localEulerAngles = new Vector3(0, rotationX, 0);
      }
      }
      В этом скрипте добавлено поле player, которое ссылается на объект игрока. Затем в методе Update() мы поворачиваем камеру вокруг оси Y и X, а затем поворачиваем игрока только вокруг оси Y. Таким образом, игрок будет поворачиваться вместе с камерой.
    5. Посмотреть следующие комментарии (4)
  3. id390161940
    Вероятно, я опоздал с ответом :babyyoda:

    CSHARP
    using UnityEngine;

    public class CameraController : MonoBehaviour
    {
    Quaternion startRotation;

    float horizontal;
    float vertical;

    private void Start()
    {
    startRotation = transform.rotation;
    }

    private void Update()
    {
    horizontal += Input.GetAxis("Mouse X") * SettingsManager._sensitivity;
    vertical += Input.GetAxis("Mouse Y") * SettingsManager._sensitivity;

    horizontal = Mathf.Clamp(horizontal, -60.0f, 60.0f); // То самое ограничение
    vertical = Mathf.Clamp(vertical, -60.0f, 60.0f);

    GameObject.FindWithTag("MainCamera").transform.rotation = startRotation * transform.rotation * Quaternion.AngleAxis(-vertical, Vector3.right);
    transform.rotation = startRotation * Quaternion.AngleAxis(horizontal, Vector3.up);
    }
    }
     
    30 апр 2023 Изменено
Top
Загрузка...