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


using System;
using UnityEngine;
using UnityEngine.InputSystem; // Добавили пространство имен нового Input System

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

    private enum Direction
    {
        Right, Left, Top, Bottom, None
    }
    public enum Axis
    {
        Vertical, Horizontal
    }

    public Axis CarAxis;
    private Direction CarDirectionX = Direction.None;
    private Direction CarDirectionY = Direction.None;
    [NonSerialized] public Vector3 FinalPosition;

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

    void Update()
    {
        // Проверяем нажатие через новый Input System
        if (Pointer.current != null)
        {
            // Если кнопку мыши/палец только что нажали
            if (Pointer.current.press.wasPressedThisFrame)
            {
                // Проверяем клик именно по этой машине с помощью Raycast
                Ray ray = Camera.main.ScreenPointToRay(Pointer.current.position.ReadValue());
                if (Physics.Raycast(ray, out RaycastHit hit) && hit.transform == transform)
                {
                    isPressed = true;
                    Vector2 mousePos = Pointer.current.position.ReadValue();
                    curPointX = mousePos.x;
                    curPointY = mousePos.y;
                }
            }

            // Если кнопку отпустили и до этого сработал клик по нашей машине
            if (Pointer.current.press.wasReleasedThisFrame && isPressed)
            {
                isPressed = false;
                Vector2 mousePos = Pointer.current.position.ReadValue();

                if (mousePos.x - curPointX > 0)
                {
                    CarDirectionX = Direction.Right;
                }
                else
                {
                    CarDirectionX = Direction.Left;
                }

                if (mousePos.y - curPointY > 0)
                {
                    CarDirectionY = Direction.Top;
                }
                else
                {
                    CarDirectionY = Direction.Bottom;
                }

                isClicked = true;
            }
        }

        // Логика перемещения к финальной позиции
        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 && FinalPosition != Vector3.zero)
        {
            Destroy(gameObject);
        }
    }

    void FixedUpdate()
    {
        if (isClicked && FinalPosition.x == 0)
        {
            Vector3 whichway = CarAxis == Axis.Horizontal ? Vector3.forward : Vector3.left;
            speed = Mathf.Abs(speed);
            if (CarDirectionX == Direction.Left && CarAxis == Axis.Horizontal)
            {
                speed *= -1;
            }
            else if (CarDirectionY == Direction.Bottom && CarAxis == Axis.Vertical)
            {

            }
            rb.MovePosition(rb.position + Vector3.forward * speed * Time.fixedDeltaTime);
        }
    }
}