Смотри, самый хороший вариант - инкапсулировать управление. В частности создать класс, который будет слушать управление у Input.GetKeyDown и хранить в себе вектор перемещения например.
Типа сделать интерфейс IInputService, у которого есть метод Vector3 GetMoveDirection() - реализации этого метода будут брать Input.GetKey(*W/A/S/D*) (или мобильное управление) и определять куда надо двигаться.
А для того, чтобы заблокировать/разблокировать движение игрока - реализовать IInputService.Lock / IInputService.UnLock в которых будет "лочиться управление" через переменную IsLock. И уже в каждой конкретной реализации проверять, не заблокировано ли управление.
Что-то вроде:
public Vector3 GetMoveDirection()
{
if(IsLock){
return Vector3.zero;
}
//а тут уже реализовать логику определения движения персонажа
}