Perekyp/Assets/Scripts/Car/CarOrbitCamera.cs

60 lines
1.9 KiB
C#

using UnityEngine;
public class CarOrbitCamera : MonoBehaviour
{
[Header("Цель")]
private Transform target; // Убрали SerializeField, теперь цель задается через код
[SerializeField] private Vector3 targetOffset = new Vector3(0, 1.2f, 0);
[Header("Настройки орбиты")]
[SerializeField] private float distance = 5.5f;
[SerializeField] private float mouseSensitivity = 150f;
[Header("Ограничения")]
[SerializeField] private float yMinLimit = 0f;
[SerializeField] private float yMaxLimit = 80f;
private float currentX = 0f;
private float currentY = 20f;
// НОВЫЙ МЕТОД: Принимает новую машину и сразу сбрасывает углы
public void SetTarget(Transform newTarget)
{
target = newTarget;
ResetCameraAngles();
}
private void Start()
{
if (target != null)
{
currentX = target.eulerAngles.y;
}
}
private void LateUpdate()
{
if (target == null) return; // Если цели нет (игрок пешком), камера ничего не делает
currentX += Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
currentY -= Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
currentY = Mathf.Clamp(currentY, yMinLimit, yMaxLimit);
Quaternion rotation = Quaternion.Euler(currentY, currentX, 0);
Vector3 focusPoint = target.position + targetOffset;
Vector3 position = focusPoint - (rotation * Vector3.forward * distance);
transform.position = position;
transform.rotation = rotation;
}
public void ResetCameraAngles()
{
if (target != null)
{
currentX = target.eulerAngles.y;
currentY = 20f;
}
}
}