Загружаем...
2 года и месяц назад
Камера от 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);
}

}

}

С настройками дампа и вектора вам лучше поиграться, чтобы настроить комфортное слежение камеры.


Наверх