Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Если разработка заняла всего 2 дня, это многое объясняет. Было бы интересно увидеть исходный код этого творения, если, конечно, это не секрет.

Не секрет, что я использую движок Unity. На самом деле, смотреть особо не на что — всё сделано на MonoBehaviour. Враги и юниты используют NavMesh 2D, но, похоже, есть баг с этим. Когда врага убивают, его перемещают, восстанавливают здоровье, задают новую цель и активируют, но он отказывается двигаться. Я не смог это исправить, так как проблема, как выяснилось, на стороне технологии. Можно попробовать обойти это, но не хочется, тем более что...

Можно создать стены с динамическим NavMeshObstacle. В коде есть проверка (с помощью CalculatePath) на возможность достижения цели. Я собрал массив, и, к сожалению, пришёл к выводу, что юниты видят то, чего видеть не должны. Не знаю, как это исправить, кроме как располагать объекты дальше друг от друга. Вероятно, иначе это просто невозможно. На самом GitHub репозитории 2D NavMesh-a написано, что баг с остановкой юнитов может появится и там есть несколько способов для решения. Ничего не помогло. Если тебе интересно, то баг с тем, что у врага через какое-то количество возрождений есть  цель до которой есть прямой путь, но он не хочет до неё двигаться. Он сбрасывает путь. Я долго это дебажил. Оказалось, что всё работает исправно.

Я создал новый проект и начал экспериментировать. Добавил ECSLite (фреймворк позволяющий добавить чистый ECS) и смог решить проблему с падением FPS на моём скромном ПК при 100-200 объектах. С ECS можно спокойно увеличить количество юнитов до 5к и даже до 35к. Позже, играя в аналогичную игру (тоже в браузере), я пришёл к выводу, что можно двигать врагов с помощью MoveTowards, и они будут атаковать всё, что встретят на своём пути. Так думаю и поступлю. Проблема может быть когда я захочу сделать какие-нибудь препятствия, поэтому похоже что придётся написать свой поиск пути. 

К слову ещё есть момент. Текущие юниты это сгенерированный полый меш на который наложен шейдер, который может отвечать за жизни, выделение юнита (я думал когда-то сделать классическую RTS) и возможно маленькая анимация его смерти. Но теперь до меня как-то дошло, что можно их отрисовывать прямо на "земле" с помощью Compute Shader. Ну ладно. Чёт много уже написал