КАК СДЕЛАТЬ ОБЛЁТ КАМЕРОЙ ВОКРУГ ОБЪЕКТА
Создайте на сцене простой объект-цель куб и приблизьте к нему дефолтную камеру поближе, если она вдруг очень далеко.
Создаём единственный скрипт, который будет контролировать нашу идею и соответственно он должен иметь ссылки на камеру и на объект в сцене. Плюс добавим свойство для скорости движения камеры, ведь она может вращаться как быстро, так и медленно.
usingUnityEngine;publicclassCameraOrbit : MonoBehaviour{-
publicCamera cam; -
publicTransform targetObject; -
publicfloatorbitSpeed = 10f; }
Вы можете повесить этот скрипт на любой объект в сцене.
Перетащите в поле cam вашу камеру, а в поле targetObject объект-цель со сцены. Скорость пока можете не менять, вдруг она подойдёт.
Все движения камеры будем обрабатывать в Update и так как ваш объект может двигаться, сделаем так, чтобы камера автоматически изначально нацеливалась на него.
usingUnityEngine;publicclassCameraOrbit : MonoBehaviour{-
publicCamera cam; -
publicTransform targetObject; -
publicfloatorbitSpeed = 10f; -
voidUpdate() -
{ -
cam.transform.LookAt(targetObject, Vector3.up); -
} }
Сначала сделаем так, чтобы при зажатии ЛКМ и движении, камера крутилась вокруг объекта по оси Y (как будто водим хоровод вокруг ёлочки в детском садике). Для этого ловим само зажатие и узнаём - насколько сдвинулась мышь по X на экране и крутим камеру с нашей скоростью.
voidUpdate(){-
cam.transform.LookAt(targetObject, Vector3.up); -
if(Input.GetMouseButton(0)) -
{ -
floatdeltaX = Input.GetAxis("Mouse X"); -
cam.transform.RotateAround(targetObject.transform.position, Vector3.up, deltaX * orbitSpeed); -
} }
Метод RotateAround в данном случае принимает следующие параметры:
- центр, вокруг которого будет кручение
- ось по которой будет кручение
- угол на который прокрутить объект
Это должно выглядеть как-то так

Теперь так же добавим кручение камерой вверх и вниз, чтобы можно было посмотреть на лысину объекта или подсмотреть снизу на Лару Крофт. Для этого уже будем ловить сдвиг мыши по Y и вертеть камеру относительно её собственной оси X.
voidUpdate(){-
cam.transform.LookAt(targetObject, Vector3.up); -
if(Input.GetMouseButton(0)) -
{ -
floatdeltaX = Input.GetAxis("Mouse X"); -
floatdeltaY = Input.GetAxis("Mouse Y"); -
cam.transform.RotateAround(targetObject.transform.position, Vector3.up, deltaX * orbitSpeed); -
cam.transform.RotateAround(targetObject.transform.position, cam.transform.right, deltaY * -orbitSpeed); -
} }
Сейчас уже можно облететь объект со всех сторон

Но конечно же хочется иметь возможность приближаться и отдалятся. Для этого уже будем использовать ПКМ. Добавьте ещё пару строчек и весь код выглядит таким образом:
usingUnityEngine;publicclassCameraOrbit : MonoBehaviour{-
publicCamera cam; -
publicTransform targetObject; -
publicfloatorbitSpeed = 10f; -
voidUpdate() -
{ -
cam.transform.LookAt(targetObject, Vector3.up); -
if(Input.GetMouseButton(0)) -
{ -
floatdeltaX = Input.GetAxis("Mouse X"); -
floatdeltaY = Input.GetAxis("Mouse Y"); -
cam.transform.RotateAround(targetObject.transform.position, Vector3.up, deltaX * orbitSpeed); -
cam.transform.RotateAround(targetObject.transform.position, cam.transform.right, deltaY * -orbitSpeed); -
} -
if(Input.GetMouseButton(1)) -
{ -
floatdeltaY = Input.GetAxis("Mouse Y"); -
cam.transform.position += cam.transform.forward * deltaY; -
} -
} }
Результат наших трудов

p.s. "Mouse X" и "Mouse Y" это имена осей, который вы можете посмотреть или изменить в меню Edit - Project Settings - Input.
