По нажатию клавиши задача выполняется прерываниями UNITY3d

Пишу код, возникла проблема, когда нужно переместить персонажа на 1 таил я нажимаю кнопку пробел один раз, и он лишь немного меняет положение, как исправить чтобы по нажатию он сделал передвижение полностью?

using UnityEngine;

public class PlayerControler : MonoBehaviour {

    public float MoveSpeed = 1.5f;
    public int RotateStage = 0;



    private void Update() {
        Vector3 To;
        if(Input.GetKeyDown(KeyCode.Q)){
            if(RotateStage <= 2){ RotateStage = RotateStage + 1; }else{ RotateStage = RotateStage = 0; }
        }
        if(Input.GetKeyDown(KeyCode.E)){
            if(RotateStage >= 1){ RotateStage = RotateStage - 1; }else{ RotateStage = RotateStage = 3; }
        }



        if(Input.GetKeyDown(KeyCode.Space)){
            
            To = transform.position;

            if(RotateStage == 0){
                To.x = To.x + 1;

        
            }
            if(RotateStage == 1){
                To.y = To.y + 1;


            }
            if(RotateStage == 2){
                To.x = To.x - 1;

                
            }
            if(RotateStage == 3){
                To.y = To.y - 1;
            
                
            }
            transform.position = Vector3.Lerp(transform.position, To, MoveSpeed * Time.deltaTime);
            To.x = 0; To.y = 0;
        }
        





    }
}

Ответы (1 шт):

Автор решения: zhenyaxxo

Изначально у тебя не правильный подход, ты с помощью if уже меняешь позицию объекта, так как To = transform.position. Создай приватное поле Vector3 и задавай уже ему все что тебе хочется.

private Vector3 to;

private void Start(){
   to = transform.position;
}

private void Update(){
   if(Input.GetKeyDown(KeyCode.Space)){
        if(RotateStage == 0){
            To.x = To.x + 1;
        }
        if(RotateStage == 1){
            To.y = To.y + 1;
        }
        if(RotateStage == 2){
            To.x = To.x - 1;
        }
        if(RotateStage == 3){
            To.y = To.y - 1;
        }
    }
    
    transform.position = Vector3.Lerp(transform.position, To, MoveSpeed * Time.deltaTime);
}
→ Ссылка