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 - лучший способ двигать платформы для физики rb.isKinematic = true; rb.useGravity = false; } void Start() { // Устанавливаем текущую позицию как начальную точку // Используем rb.position для работы с Rigidbody startPoint = rb.position; } void FixedUpdate() { MovePlatform(); } 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; } } }