using UnityEngine; public class Unit : MonoBehaviour { private const float moveSpeed = 4f; private const float rotationSpeed = 10f; private const float stoppingDistance = 0.1f; private static readonly int isWalking = Animator.StringToHash("IsWalking"); [SerializeField] private Animator UnitAnimator; private Vector3 targetPosition; public GridPosition GridPosition { get; private set; } private void Awake() => targetPosition = transform.position; private void Start() { GridPosition = LevelGrid.Instance.GetGridPosition(transform.position); LevelGrid.Instance.AddUnitAtGridPosition(GridPosition, this); } private void Update() { if (Vector3.Distance(targetPosition, transform.position) > stoppingDistance) { Vector3 moveDirection = (targetPosition - transform.position).normalized; transform.position += moveSpeed * Time.deltaTime * moveDirection; transform.forward = Vector3.Lerp(transform.forward, moveDirection, rotationSpeed * Time.deltaTime); UnitAnimator.SetBool(isWalking, true); } else { UnitAnimator.SetBool(isWalking, false); } GridPosition newGridPosition = LevelGrid.Instance.GetGridPosition(transform.position); if (newGridPosition != GridPosition) { LevelGrid.Instance.UnitMovedGridPosition(this, GridPosition, newGridPosition); GridPosition = newGridPosition; } } public void Move(Vector3 newTargetPosition) => targetPosition = newTargetPosition; }