Судя по тому, что @davidluzgouveia прокомментировал пост анонимно, я приведу свой проект. Следование по пути и поиск пути очень разные, хотя. Поиск пути - это больше того, о чем анонимно публиковалось, и для поиска пути я бы заглянул в алгоритм Дейкстры. Для следования пути я полностью использую свой физический движок. То, как я это настроил, заключается в том, что каждая локация, по которой идет класс юнитов, настраивается в своем подклассе пути с помощью 2D-смещений, да, они 2D, а не 3D, это из-за того, как я настроил свою физику в своей игре ,
Объяснение 3D: у
каждого подразделения есть только один главный коллайдер, который специально настроен для столкновения с объектами местности и мира. Это капсула, имеет радиус и высоту, говоря програматически. Он построен в центре модели и должен проходить сразу за передней и верхней частью модели. Но у меня также есть поверхностное смещение для того, как далеко он находится от земли, и всплеск того, сколько ему позволено скользить вниз, прежде чем слегка подпрыгивать, за раз. Звучит так, будто я прибегаю к какому-то искаженному решению проблемы столкновения с землей, но у меня есть свои причины.
В любом случае, вы должны приложить силу к этому объекту капсулы, и он должен постоянно зависать над землей. Это не значит, что оно не может быть выше, просто оно не может быть ниже. Причина, по которой он должен зависать (в моем случае), заключается в том, что в физическом двигателе с твердым телом и рэгдоллом ноги моих юнитов процедурно анимированы. Таким образом, применяя простую силу к капсуле, ноги моей сущности сами переместятся. У них также будут свои отдельные приложения силы тяжести! Это позволяет, если мой персонаж находится под наклоном, одна нога может находиться на более низком уровне, чем другая.
Это именно то, как вы должны это сделать. Судя по тому что ты спрашиваешь. Если вы хотите пропустить некоторые функции, это, безусловно, хорошо, особенно если это RTS или FPS, и никто никогда не увидит ноги юнитов или все равно будет заботиться. Но в целом у юнита должен быть один ГЛАВНЫЙ объект столкновения, который почти исключительно работает с движением персонажа.
В частности, 2D: у
вас все еще должна быть основная точка или просто какое-то указание, чтобы двигатель двигался вперед, для движения юнита. Вы могли бы дать каждому подразделению подкласс пути, который имеет несколько местоположений, которые ему нужно пройти, вы можете указать его в коде уровня (например, location1 (x, y) location2 (x, y) и т. Д.) Наилучшим образом (я не знаю не знаю, над какой игрой вы работаете), вероятно, будет указывать места на уровне и иметь, что каждый юнит будет обрабатывать их в порядке, определяемом уровнем, и после того, как он достигнет каждой локации, он заменит желаемое место на следующий он должен добраться до.
Есть множество способов изменить это, например, иметь список мест на первом месте для каждого юнита, так как это означает, что не все юниты должны идти в одни и те же места. Однако таким же образом вы можете сделать это и в коде уровня (unit1.location1 (x, y) unit1.location2 (x, y) grunt.l1 (x, y) knight.loc3 (x, y) без разницы)
Всего несколько идей! Я предлагаю вам прочитать 3D-версию, хотя она гораздо менее актуальна.
РЕДАКТИРОВАТЬ: Я решил просто предоставить оба для тех, кто мог бы прочитать это (да, это правда) .... (Первоначально я только просмотрел ваш вопрос и не понял, что это было довольно 2D-специфика, пока я не перечитал его>.>)