39 lines
2.0 KiB
C#
39 lines
2.0 KiB
C#
using UnityEngine;
|
||
|
||
public class CameraFollow : MonoBehaviour
|
||
{
|
||
[Header("Цель и Смещение")]
|
||
[Tooltip("Объект, за которым следует камера (ваш шарик).")]
|
||
[SerializeField] private Transform target;
|
||
|
||
[Tooltip("Смещение камеры относительно шарика (например, 0, 5, -8).")]
|
||
[SerializeField] private Vector3 offset = new Vector3(0f, 5f, -8f);
|
||
|
||
[Header("Настройки Сглаживания")]
|
||
[Tooltip("Скорость, с которой камера догоняет цель. Меньше = плавнее.")]
|
||
[SerializeField] private float smoothSpeed = 5f;
|
||
|
||
// Используем LateUpdate, чтобы камера двигалась после того, как шарик закончит свое движение
|
||
void LateUpdate()
|
||
{
|
||
if (target == null)
|
||
{
|
||
Debug.LogWarning("CameraFollow: Цель (Target) не установлена. Назначьте объект шарика!");
|
||
return;
|
||
}
|
||
|
||
// 1. Определяем желаемую позицию камеры
|
||
Vector3 desiredPosition = target.position + offset;
|
||
|
||
// 2. Используем Lerp для плавного перемещения текущей позиции к желаемой
|
||
// Vector3.Lerp(a, b, t) интерполирует между 'a' и 'b' на величину 't'.
|
||
// Мы умножаем smoothSpeed на Time.deltaTime для обеспечения независимости от частоты кадров.
|
||
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed * Time.deltaTime);
|
||
|
||
// 3. Применяем сглаженную позицию
|
||
transform.position = smoothedPosition;
|
||
|
||
// 4. Опционально: поворачиваем камеру, чтобы она всегда смотрела на шарик
|
||
transform.LookAt(target);
|
||
}
|
||
} |