Загрузка данных
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);
}
}
}