Доброго времени суток!
Сегодня мы рассмотрим пример создания простой игровой камеры от третьего лица в Unity.
Самый простой вариант сделать так, чтобы камера «следила» за игровым объектом, это сделать этот игровой объект родительским для камеры. Но в этом случае камера будет очень жесткой, ее поворот в пространстве будет полностью зависеть от поворота родительского игрового объекта. Кроме того, камера не будет реагировать на препятствия возникающие между ней и ее целью наблюдения.
Чтобы избежать этих моментов в видео мы написали небольшой скрипт, который будет управлять камерой. И рассмотрели принцип его работы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SimpleCamera : MonoBehaviour { //Цель public Transform target; //Скорость слежения public float speed = 4f; //Маска слоев препятствий public LayerMask maskObstacles; private Vector3 _position; void Start () { _position = target.InverseTransformPoint(transform.position); } void Update () { var oldRotation = target.rotation; target.rotation = Quaternion.Euler(0, oldRotation.eulerAngles.y, 0); var currentPosition = target.TransformPoint(_position); target.rotation = oldRotation; transform.position = Vector3.Lerp(transform.position, currentPosition, speed * Time.deltaTime); var currentRotation = Quaternion.LookRotation(target.position - transform.position); transform.rotation = Quaternion.Lerp(transform.rotation, currentRotation, speed * Time.deltaTime); RaycastHit hit; if (Physics.Raycast(target.position, transform.position - target.position, out hit, Vector3.Distance(transform.position, target.position), maskObstacles)) { transform.position = hit.point; transform.LookAt(target); } } } |
2 комментария
что нужно дописать в код, чтобы была возможность смотреть дальше (наверх) или вниз на автобус?
Огромное спасибо за разъяснения