Загрузка данных


using System;
using UnityEngine;

public class CarController : MonoBehaviour
{
    private Rigidbody rb;
    public float speed = 5f, finalspeed = 15f, rotatespeed = 300f;
    private bool isClicked;
    private float curPointX, curPointY;

    public enum Axis
    {
        Vertical, Horizontal
    }

    public Axis CarAxis;
    
    [NonSerialized] public Vector3 FinalPosition;
    
    private enum Direction
    {
        Forward, Backward, None
    }
    private Direction moveDirection = Direction.None;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void OnMouseDown()
    {
        curPointX = Input.mousePosition.x;
        curPointY = Input.mousePosition.y;
    }

    void OnMouseUp()
    {
        float deltaX = Input.mousePosition.x - curPointX;
        float deltaY = Input.mousePosition.y - curPointY;

        // Минимальный порог сдвига, чтобы исключить случайные клики без пролистывания
        if (Mathf.Abs(deltaX) < 10f && Mathf.Abs(deltaY) < 10f) return;

        if (CarAxis == Axis.Horizontal)
        {
            // Для горизонтальной машины учитываем сдвиг по оси X
            moveDirection = deltaX > 0 ? Direction.Forward : Direction.Backward;
        }
        else if (CarAxis == Axis.Vertical)
        {
            // Для вертикальной машины учитываем сдвиг по оси Y
            moveDirection = deltaY > 0 ? Direction.Forward : Direction.Backward;
        }

        isClicked = true;
    }

    void Update()
    {
        if (FinalPosition.x != 0)
        {
            transform.position = Vector3.MoveTowards(transform.position, FinalPosition, finalspeed * Time.deltaTime);
            Vector3 lookAtPos = FinalPosition - transform.position;
            lookAtPos.y = 0;
            if (lookAtPos != Vector3.zero)
            {
                transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(lookAtPos), Time.deltaTime * rotatespeed);
            }
        }

        if (transform.position == FinalPosition)
        {
            Destroy(gameObject);
        }
    }

    void FixedUpdate()
    {
        if (isClicked && FinalPosition.x == 0)
        {
            Vector3 whichWay = CarAxis == Axis.Horizontal ? Vector3.forward : Vector3.left;
            float currentSpeed = Mathf.Abs(speed);

            if (moveDirection == Direction.Backward)
            {
                currentSpeed *= -1f;
            }

            rb.MovePosition(rb.position + whichWay * currentSpeed * Time.fixedDeltaTime);
        }
    }
}