По оптимизации, лучше создавать компонент Enimy и искать врагов по наличию этого компонента. По скорости получается чуть медленнее, но не нужно возиться с тегами… добавил компонент, настроил поведение и сделал префаб.
Насчет создания префабов, то проще сначала сделать 1 игровой объект и перетащить его с дерева сцены на Assets (так проще для понимания геймдизайнерам).
Да там много где странностей:
1. При знании того, что в сцене может быть много объектов — никогда не использовать поиск по имени / тегу, ибо оно идет по всему дереву, проверяя все объекты. См п.3.
2. Никогда не использовать VectorX.Distance(), тем более в Update. Всегда стараться использовать (Vector1 — Vector0).sqrDistance и сравнивать с квадратом расстояния (предрассчитанным или просто умноженным на себя). Понять, почему так, поможет изучение формулы рассчета расстояния между точками.
3. Проверять все объекты по списку при большом количестве может быть нерационально. Т.к. на всех объектах висит коллайдер, то рациональнее всегда получать список объектов через Physics.OverlapSphere() — физика в unity3d работает быстро + использует внутренние оптимизации по разбиению и раннему отсечению пространства + можно явно указывать слои для поиска. Потом просто найти минимум дистанции в полученном массиве и получить цель.
4. Много дублирующегося кода.
Если хочется глобального хранилища переменных, стоит подумать над статическим классом, либо реализацией синглтона (что предпочтительнее, т.к. позволит визуально настраивать паблик-параметры — unity3d не показывает в инспекторе статик-свойства).
Надо подумать над унификацией скрипта выбора цели и атаки — пушка является таким же мобом, только неподвижным. Разницу в выборе целей можно реализовать слоями.
Я полностью с Вами согласен, именно так и планировал модифицировать код в дальнейшем. Только про пункт 2 впервые слышу, почитаю обязательно на эту тему.
Сам на JS не писал, но регулярно на него смотрю в Scripting Reference. Там справа вверху от примеров кода есть переключатель языка, посмотрите на разницу сами ;)
Это плохая мысль — могут начать происходить всякие забавные штуки при ошибках расчета столкновений типа мгновенного увеличения скорости до такой степени, что боты будут выстреливаться прочь с игровой области. Лучше воспользоваться CharacterCollider — у него есть готовые методы по перемещению.
Хм, никогда не видел таких ошибок от перемещения через AddForce: тестировал сцену с 16000 «шариками», они бились друг о друга, но не улетали за пределы моей сцены.
Зависит от формы коллайдера — есть есть острые-прямые углы — начинаются «запинания» и дрожания. У «шарика» по умолчанию SphereCollider, его нормально «выталкивает» и он скользит по поверхности других тел.
Подбери шип подходящий, определись с типом танка — пассив/актив, скилы учи на капу, шилд/армор резы, реген и объём шилда/работу с репками и вперёд. Танкуй хоть до посинения. Я вон написал про две T2 репы и харднера в домике. 5 капречей T2, CCC, и капа не кончается вообще. Аукс нано памп даёт прибавку в 10 % к репкам. На миске агришь группу, выпускаешь T2 огров и сидишь форумы читаешь. …незнаю сидел както на станции фитил ББху, а тут за воротами тарань с клавой на дрык напали, пока я ББхой подварпал к гейту и пропрыгнул от тарани остался врек, а клава летала в 300 км и ругалась в локале. так что хз чего вы там танкуете. …о/, харош кемпить на гейте, точку в алли я заинвайчу в ганг и варп на гейт ЕЦ, проваливаемся и на меня в ноль, я на мальке, держу апок, меня дроны пилят. Варп в ноль (на инсту), дреды сразу в сидж, лочат палку, кары лочат дредов и друг друга, дикторы бублят все что движется, фальконы и прочие реконы висят в клоке до спецприказа. Интера, осторожней с файтерами, чтоб смартами не посносило, на белтах потом отрабатывать придется. Хаки и прочие кто помельче выдавливаем саппорт противника. Коврик — скинь пробки.
Дошли руки, попробовать повторить все описанное
Застрял на «Создайте объект MobSpawner, его местоположение не играет роли» — какой объект? GameObject, а дальше? Сфера, куб или плейн?
Как создать простую Tower Defense игру на Unity3D, часть первая