2 года и месяц назад
Камера от 3го лица
Всем доброго времени суток, давно хотел показать скрипт которым пользуюсь для персонажей от третьего лица. Скрипт имеет простую настройку.
Приступим.
Создаём скрипт с названием класса CameraLook, сохраняем и вешаем на камеру, не на персонажа!!! Открываем скрипт и прям копипастом заливаем мой
С настройками дампа и вектора вам лучше поиграться, чтобы настроить комфортное слежение камеры.
Камера от 3го лица
Всем доброго времени суток, давно хотел показать скрипт которым пользуюсь для персонажей от третьего лица. Скрипт имеет простую настройку.
Приступим.
Создаём скрипт с названием класса CameraLook, сохраняем и вешаем на камеру, не на персонажа!!! Открываем скрипт и прям копипастом заливаем мой
using UnityEngine;
using System;
public class CameraLook : MonoBehaviour
{
//[SerializeField]Vector3 cameraOffset;
//[SerializeField]float damping;
//0 0.06 -0.83
//5
//Такие настройки использую я для своих персонажей
[Serializable]
public class CameraRig
{
public Vector3 cameraOffset;
public float Damping;
}
[SerializeField] CameraRig defaultCamera;
public GameObject cameraLookTarget;//можно так же указать персонажа, либо пустой объект на персонаже
public GameObject player; //указать игрока
private bool actionCamera = false;// эксперементальная булевая как и условия в FixedUpdate
void FixedUpdate()
{
CameraRig CameraRig = defaultCamera;
Vector3 targetPosition = cameraLookTarget.transform.position + cameraLookTarget.transform.forward * CameraRig.cameraOffset.z +
cameraLookTarget.transform.up * CameraRig.cameraOffset.y +
cameraLookTarget.transform.right * CameraRig.cameraOffset.x;
Vector3 collisionDestination = cameraLookTarget.transform.position + player.transform.up * CameraRig.cameraOffset.y - player.transform.forward * .1f;
HandleCameraPosition(collisionDestination, ref targetPosition);
Quaternion targetRotation = Quaternion.LookRotation (cameraLookTarget.transform.position - targetPosition, Vector3.up);
transform.position = Vector3.Lerp(transform.position, targetPosition, CameraRig.Damping * Time.deltaTime);
if (actionCamera == true)
{
transform.rotation = Quaternion.Lerp(targetRotation, cameraLookTarget.transform.rotation, CameraRig.Damping * Time.deltaTime);
}
else
{
transform.rotation = Quaternion.Lerp(transform.rotation, cameraLookTarget.transform.rotation, CameraRig.Damping * Time.deltaTime);
}
}
private void HandleCameraPosition(Vector3 toTarget, ref Vector3 fromTarget)
{
RaycastHit hit;
if (Physics.Linecast(toTarget, fromTarget, out hit))
{
Vector3 hitPoint = new Vector3(hit.point.x + hit.normal.x * .2f, hit.point.y, hit.point.z + hit.normal.z * .2f);
fromTarget = new Vector3(hitPoint.x, fromTarget.y, hitPoint.z);
}
}
}
С настройками дампа и вектора вам лучше поиграться, чтобы настроить комфортное слежение камеры.
