Как реализовать растения в игре типа Растения против Зомби? Юнити

Я хочу попытаться сделать игру по типу Растения против Зомби. Но не понимаю, как лучше и правильнее всего реализовать растения. В оригинальной игре их порядка 50 с лишним штук - мне столько не надо, нужно штук 10-15. Каким образом лучше это реализовать?

Может сделать общий класс Plant, в котором создать переменные для названия растения, его урона, здоровья, спрайта и т.д., а потом для каждого объекта **создавать экземпляр класса, указывая для каждого растения свои переменные? Но что сделать потом? Я создам префаб растения и какой скрипт в таком случае мне на него вешать?

Или можно для каждого вида растения прописать свой скрипт, со своими переменными. Каждому растению прописать свое поведение (подсолнух - дает солнце, другие растения - стреляют, мину - взрываются, когда наступает зомби), а потом просто вешать скрипт, например, подсолнуха на префаб подсолнуха. Но в таком случае мне придется создавать много скриптов: по 1 для каждого растения. Мне кажется это неправильно.

Или можно... *сделать еще как-то. *

P.S. Пожалуйста, не надо писать, что "Вот еще один думает, что сможет реализовать игру, которую несколько месяцев/лет делала команда профессиональных разработчиков.", лучше просто пройдите мимо этого вопроса, потому что: я НЕ буду делать точную копию, я НЕ буду куда-либо выкладывать эту игру, я НЕ собираюсь вообще ее куда-то девать, я просто хочу... проверить свои силы что ли... и попытаться сделать что-то подобное. Может выучить какие-то новые вещи и вдруг я встрял на таком вопросе. Надеюсь на помощь, заранее спасибо :)))


Ответы (1 шт):

Автор решения: Yaroslav

Вам придётся написать больше одного класса, но не для каждого растения.

Скрипт GameUnit просто содержит поле с префабом скина и ссылкой на скрипт Skin, объекта который он создаст из префаба, поле номера линии, количеством жизней, максимальных жизней, и функций получения урона и функцией смерти.

Ответственность класса Plant (наследуется от GameUnit) проста: цена, функция построения и поле номера клетки.

Skin с функциями проиграть rise, idle, walk, attack, dead настроенные под скин и для растений и для зомбаков.

PlantBehaviour просто находит класс Plant и хранит на него ссылку, для получения ссылки к скину и тайлу(линия и клетка).

AttackBehaviour умеющий палить врагов на своей линии что заставляет стрелять наследуется от PlantBehaviour. Растения у которых какие-то необыные атаки (например атакуют врагов на всех линиях или соседних) имеют свой скрипт наследуемый от AttackBehaviour и меняют фунции палева врага или спавна снаряда.

У добытчиков скрипт HarvestBehaviour, наследуемое всё от тогоже PlantBehaviour.

У мин свой скрипт, а стенкам поведение вовсе не нужно.

Zombie тоже наследуются от GameUnit. Реализует атаку другого GameUnit.

У зомбаков свои скрипты передвижения как поведения растений и дополнительных фич типа щита и т.д.

У снарядов тоже могут быть разные скрипты.

Что-то примерно так.

→ Ссылка