Мне удалось это осуществить.
Я просто немного изменил ввод из учебника по RogueLike из раздела обучения Unity.
Итак, это код, отвечающий за движение
void Move(string direction_string)
{
ChangeDirection(direction_string);
Vector2 start = transform.position;
Vector2 end = start + direction;
boxCollider.enabled = false;
hit = Physics2D.Linecast(start, end, blockingLayer);
boxCollider.enabled = true;
if (hit.transform == null) {
StartCoroutine(Movement(end));
animator.SetTrigger(direction_string);
return;
} else {
moveSequence.RemoveAt(0);
animator.SetTrigger(direction_string);
return;
}
}
void ChangeDirection(string direction_string)
{
switch (direction_string) {
case "up":
direction = dir_Up;
break;
case "down":
direction = dir_Down;
break;
case "left":
direction = dir_Left;
break;
case "right":
direction = dir_Right;
break;
}
}
IEnumerator Movement(Vector3 end)
{
moving = true;
float sqrRemainingDistance = (transform.position - end).sqrMagnitude;
while (sqrRemainingDistance > float.Epsilon) {
Vector3 newPosition = Vector3.MoveTowards(rb2D.position, end, moveSpeed * Time.deltaTime);
rb2D.MovePosition(newPosition);
sqrRemainingDistance = (transform.position - end).sqrMagnitude;
yield return null;
}
currentPos = end;
moveSequence.RemoveAt(0);
moving = false;
}
}
Вот что отвечает за ввод
void FixedUpdate ()
{
if (moveSequence.Count > 0 && !moving) {
Move(moveSequence[0]);
}
}
Затем просто подключите его к функции Update (), которая прослушивает нажатие кнопки, и добавьте элемент списка в MoveSequence List, например
moveSequence.Add("up");