У вас есть пара вещей, которые вы должны остерегаться.
1) Вы никогда не сбрасываете "dest" в любом месте своего кода. По мере того как вы двигаетесь на основе расчета, установленного на «р». Я полагаю, что ваш персонаж ударяет о стену, которая находится настолько близко, насколько это возможно, к "dest", поэтому она не может двигаться ближе.
Я не могу предсказать, что вы пытаетесь сделать своим геймплеем, но я думаю, вы захотите сбросить «dest» в OnCollision (), чтобы объект двигался, а не смотрел на стену.
Как общий совет, я бы не стал устанавливать PacMac (управляемый игроком юнит) на пункт назначения. Вы хотели бы рассчитать смещение на основе входных данных, а затем попытаться добавить его в transform.position (возможно, безопаснее с помощью системы RigidBody), а затем позволить моделированию перейти оттуда.
2) Вы движетесь без привязки к игровому времени. Вы должны действительно изменить свое смещение, чтобы оно рассчитывалось с учетом Time.deltaTime. Это важно, если вы работаете на быстром или медленном компьютере.
С вашим текущим кодом вы будете двигаться намного быстрее на сильном компьютере и медленнее на медленном компьютере.
3) Исходя из вашего опыта pacman, вы можете изменить их на операторы if if. Еще лучше, но сложнее, принять только последний вход. Это не даст вам двигаться по диагонали (к чему ваш текущий код подвержен. Если вы сделаете второй метод, вам нужно будет сохранить стек всех нажатых кнопок на случай, если кто-то попытается удерживать несколько кнопок одновременно.