Автор Тема: Unity3d - Camera personage (Камера персонажа)  (Прочитано 1820 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Октябрь 27, 2013, 21:49:41 pm
Прочитано 1820 раз

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2454
  • Репутация:
    153
    • Просмотр профиля
Решения касающиеся камеры персонажа
« Последнее редактирование: Октябрь 27, 2013, 23:05:17 pm от Mimi Neko »

Ноябрь 06, 2016, 14:25:53 pm
Ответ #1

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2454
  • Репутация:
    153
    • Просмотр профиля
Передвижение камеры RPG в 3D:  (один из вариантов)

Передвижение камеры состоит из нескольких частей:

1. Высчитываем сдвиг камеры относительно объекта
2. Высчитываем угол поворота
3. Перемещаем камеру
4. Направляем камеру на объект

(Скрипт нужно прикрепить к камере, а в поле target указать игрока).

    public class OrbitCamera : MonoBehaviour {
      [SerializeField] private Transform target;
      public float rotSpeed = 1.5f;
      private float _rotY;
      private Vector3 _offset;
      // Use this for initialization
      void Start () {
        _rotY = transform.eulerAngles.y;
        _offset = target.position - transform.position;
      }
     
      // Update is called once per frame
      void LateUpdate () {
     
        float horInput = Input.GetAxis ("Horizontal");
        if (horInput != 0) {
          _rotY += horInput * rotSpeed;
        } else {
          _rotY += Input.GetAxis ("Mouse X") * rotSpeed * 3;
        }
        Quaternion rotation = Quaternion.Euler (0, _rotY, 0);
        transform.position = target.position - (rotation * _offset);
        transform.LookAt (target);
      }
    }

источник: https://unity-help.tk

Ноябрь 06, 2016, 16:02:49 pm
Ответ #2

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2454
  • Репутация:
    153
    • Просмотр профиля
Unity3D поворот персонажа вместе с камерой в RPG 3D игре:

Добавляем данный скрипт к игроку и в target добавляем камеру.

    public class RelativeMoment : MonoBehaviour {
      [SerializeField] private Transform target;
      public float rotSpeed = 10.0f;
      void Update () {
        Vector3 movement = Vector3.zero;
        float horInput = Input.GetAxis ("Horizontal");
        float verInput = Input.GetAxis ("Vertical");
        if (horInput != 0 || verInput != 0){
          movement.x = horInput;
          movement.z = verInput;
          Quaternion tmp = target.rotation;
          target.eulerAngles = new Vector3 (0, target.eulerAngles.y, 0);
          movement = target.TransformDirection (movement);
          target.rotation = tmp;
        //  transform.rotation = Quaternion.LookRotation (movement);
          Quaternion direction = Quaternion.LookRotation (movement);
          transform.rotation = Quaternion.Lerp (transform.rotation, direction, rotSpeed * Time.deltaTime);
        }
      }
    }


источник: https://unity-help.tk