69 lines
2.6 KiB
C#
69 lines
2.6 KiB
C#
using UnityEngine;
|
||
|
||
[RequireComponent(typeof(Rigidbody))] // Убедимся, что Rigidbody всегда есть
|
||
public class MovingPlatform : MonoBehaviour
|
||
{
|
||
[Header("Настройки Платформы")]
|
||
public Vector3 startPoint; // Начальная точка (будет установлена автоматически)
|
||
public Vector3 endPoint; // Конечная точка, куда платформа будет двигаться
|
||
[SerializeField] private float speed = 2f; // Скорость движения
|
||
|
||
private Rigidbody rb;
|
||
private bool movingToEnd = true;
|
||
|
||
void Awake()
|
||
{
|
||
rb = GetComponent<Rigidbody>();
|
||
|
||
// Киннематический Rigidbody - лучший способ двигать платформы для физики
|
||
rb.isKinematic = true;
|
||
rb.useGravity = false;
|
||
}
|
||
|
||
void Start()
|
||
{
|
||
rb.isKinematic = true;
|
||
rb.useGravity = false;
|
||
// Устанавливаем текущую позицию как начальную точку
|
||
startPoint = rb.position;
|
||
previousPosition = rb.position; // Инициализируем предыдущую позицию
|
||
}
|
||
|
||
void FixedUpdate()
|
||
{
|
||
MovePlatform();
|
||
previousPosition = rb.position;
|
||
}
|
||
|
||
private void MovePlatform()
|
||
{
|
||
// Определяем целевую позицию
|
||
Vector3 target = movingToEnd ? endPoint : startPoint;
|
||
|
||
// Перемещаем платформу к целевой точке с заданной скоростью
|
||
// Используем rb.MovePosition() для корректного физического перемещения
|
||
Vector3 newPosition = Vector3.MoveTowards(rb.position, target, speed * Time.fixedDeltaTime);
|
||
rb.MovePosition(newPosition);
|
||
|
||
// Проверяем, достигли ли мы цели
|
||
// (Используем rb.position)
|
||
if (rb.position == target)
|
||
{
|
||
// Меняем направление движения
|
||
movingToEnd = !movingToEnd;
|
||
}
|
||
}
|
||
|
||
|
||
private Vector3 previousPosition;
|
||
|
||
|
||
|
||
// *** НОВЫЙ МЕТОД: Возвращает фактическую скорость платформы ***
|
||
public Vector3 GetVelocity()
|
||
{
|
||
// Скорость = (Текущая позиция - Предыдущая позиция) / Время
|
||
return (rb.position - previousPosition) / Time.fixedDeltaTime;
|
||
}
|
||
}
|