25

Another realm v0.06

Итак, пришло время очередного доклада о прогрессе разработки.
За последний месяц я окончательно закончил работу над ближним и дальним боем, пофиксил все видимые баги и немного оптимизировал производительность, освоился с новым ИИ, добавил дийствия обнажения и вложения оружия в "ножны", добавил активную паузу(а точнее замедление), и, наконец, приступил к системе магии. В этом посте расскажу побольше о последнем.

Предистория (можно пропустить)
Планировать систему магии я начал уже давно, поэтому на её реализацию до нынешнего состояния у меня ушло не больше недели. Учитывая, что я не мог выделять много времени каждый день и то, что не малую часть времени ушло на попытки перейти к системе "разработки через тестирование" (test-driven development), я считаю, что справился весьма не плохо. Я начал чувствовать, что мои знания и навыки как в области геймдева в целом, так и программирования выросли на порядок, с тех пор как я начал разработку. Если кого-то интересует мой опыт разработки через тестирование в юнити и почему я пришёл к заключению, что лучше не использовать данную методику в этом проекте, могу написать об этом отдельный пост.

Компонентная система заклинаний.
Заклинания в мой игре это по сути комбинации различных компонентов, что позволяет создавать невероятное разнообразие заклинаний из небольшого количества компонентов. Так же эту систему можно будет внедрить в геймплей и позволить игрокам создавать собственные заклинания на подобие того, что было в морровинде и two worlds 1/2. Каждый компонент представляет из себя скриптовый объект( далее "со"), имеет свою реализацию функции "выполнить" и настройки которые он использует в этой функции. При использовании заклинания в сцене создаётся (или активируется из пула) объект, который инициирует и запускает заклинание(я называю его spellEngine или движок заклинания). Его задача в том, чтобы инициировать и проследить за выполнением всех компонентов заклинания и уничтожить(или вернуть в пул) все что с ним связано по завершению. Движок раздаёт компонентам ссылки на себя и следующий компонент в очереди и запускает выполнение первого компонента. Так же он запускает любые корутины, о которых его просят компоненты и следит за ними, чтобы знать, когда все компоненты закончили выполнение. Каждый компонент принимает ссылку на заклинателя, цель, начальную и конечную позицию и использует эти данные по своему усмотрению, а в конце выполнения, запускает выполнение следующего компонента и передаёт ему такие же данные. Весь сок в том, что компонент может изменять передаваемые данные, вызывать следующий компонент несколько раз или с задержкой. Например, компонент АОЕ находит все цели в определённом радиусе от цели и запускает следующий(а следовательно и все последующие) для каждой цели. Компонент "повторитель", запускает следующий компонент по той же цели несколько раз с опциональной задержкой. Компонент "снаряд" создаёт физический снаряд или спецэффект, которые летит в сторону цели или следует за ней и в конце передаёт новую позицию, как из начальную следующему компоненту. Компоненты имею опцию быть параллельными. В таком случае они запускают следующий компонент сразу, не дожидаясь окончания своей функции.
На данный момент имеется 5 компонентов: Урон, визуальный эффект, снаряд, повторитель и область действия. Каждый компонент имеет дополнительную настройку, поэтом можно очень быстро создать новые варианты компонентов. Все это создает очень гибкую систему создания заклинаний. Из минусов, разве что, сложность балансировки всевозможных вариантов заклинаний с точки зрения геймплея.
На данный момент в ближайших планах добавить ещё один компонент: "силу" (имеется ввиду термин из физики, force). Данный компонент позволит отбрасывать, притягивать и подкидывать персонажей и другие предметы применяя к ним физическую силу.
Интересно услышать от вас идеи для будущих компонентов. Возможно, что-то мне понравится и я реализую это в игре.

Напомню так же, что я до сих пор ищу соратников по разработке. Несколько человек связались со мной ранее и даже кое чем помогли, но активно в разработке, они все же не участвуют. Если у вас есть интерес к проекту и вы имеете опыт/желание приобрести опыт в ниже описанных областях геймдева, напишите об это в коммента, либо найдите мои контактные данные в предыдущих постах.

Требуются:
-3д моделер
-3д аниматор
-создатель спецэффектов
-создатель интерфейса
-иллюстратор/художник
(можно несколько в одном лице. Опыт и знания не обязательны если у вас есть желание обучаться и вы готовы тратить несколько часов в неделю на проект)

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Автор поста оценил этот комментарий

Не верю.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Не верите, что у меня зарплата 0 или что поделим поровну?
показать ответы
0
Автор поста оценил этот комментарий

Никому не верю

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Ну, моё дело - предложить, ваше дело - отказаться.
0
Автор поста оценил этот комментарий

А сколько зп?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
0. Так же как и у меня. В будущем, если будет какая-то прибыль, то, естественно, поделим поровну между всеми активно участвовавшими разработчиками.
показать ответы
2
Автор поста оценил этот комментарий

это ММО на  Unity3d?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Это не ммо. Это сингл плеер.

1
Автор поста оценил этот комментарий

А насколько TDD оправдывает себя в разработке игры?
Что покрыто тестами?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

ТДД себя очень оправдывает в разработке, если к нему правильно подойти. Для этого необходимо использовать этот метод с самого начала разработки. В ТДД ты сначала пишешь тест - убеждаешься, что он не проходит, а потом уже пишешь код так, чтобы тест прошел. По-моему, это отличный способ сделать свой код гранулированным, понятным и лишенным багов. Покрыто тестами должно быть абсолютно все. Поэтому, подобный подход наиболее подходит для более простых проектов. В сложных проектах не достаточно обеспечить работоспособность отдельных систем - важно убедиться, что правильно они взаимодействуют. В итоге и тестирование становится сложнее. Впрочем у ТДД и на это есть ответ, просто я так далеко в тему не углублялся.

показать ответы
2
DELETED
Автор поста оценил этот комментарий
Да, ох уж эта нехватка людей...

С другом тоже колупаем игру на юнити, для себя делаем, конечно... Нужон адекватный программист, чтобы хорошую игру сделать.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
У меня все наоборот. Не хватает контенто-создавателей.
показать ответы
2
Автор поста оценил этот комментарий
Привет, дай контакты свои. Есть желание поработать
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Что-то от тебя ничего не пришло. Ты решил не связываться или просто не нашёл меня в дискорде?
0
Автор поста оценил этот комментарий

Да, довольно интересный пример. Однако это всё ещё "холодные цифры" (хотя это, скорее, зависит от реализации) - ведь задача теста всё равно ограничивается расчетом пути из точки А в точку Б, пусть и положение последней нестатично.
И я всё же не могу однозначно согласиться, что в "более простых" проектах тесты будут полезны. Но тут, опять же, субъективное "более простой". На мой взгляд, тесты будут оправданы в среднем проекте, где core-механика подвержена достаточно частым модификациям либо зависит от сторонних библиотек.


Ни в коем случае не отрицаю общую полезность тестов. Но до сих пор полагаю, что на большинстве игровых проектах это излишнее. Ведь сам по себе TDD не любит спешки, а разработка грамотных тестов занимает приличный кусок времени. С другой стороны, если проект не ограничен по времени, то why not.


А насчет документации кода тестами... Интересная мысль. Но ведь при продуманной архитектуре и при соблюдении однозначного code style код сам по себе будет самодокументируемым, разве нет? Более того, при пополнении команды программистов неплохо бы проводить ревью, чтоб код нового человека не вносил хаос в понимание общей картины.


В общем опять наклацал портянку с мыслями (=

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Согласен, что на тесты уходит много времени. Вопрос в том, оправданная ли это затрат или нет. В моем проекте я посчитал, что нет. Но в следующем проекте я обязательно буду следовать тдд. Возможно, из меня просто рассказчик некудышный, поэтому я не могу правильно раскрыть всю полезность тдд. Если погуглить тдд и юнити на английском, то выдаст несколько отличных видосов с конференций геймдева. Они то меня и убедили попробовать данный метод. Может и вам поможет.
0
Автор поста оценил этот комментарий

Мне интересно чуть более подробно узнать о компонентной системе заклинаний.
Я так понимаю, это реализовано через своеобразный singleton, который должен знать обо всех актуальных эффектах заклинаний на сцене? И если я верно понял, само заклинание инициализируется в SpellEngine, делегируя ему ответственность за своё поведение?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Не. Никто ни о чем не знает и синглтоны не используется. Есть рецепт заклинания - тоже скриптовый объект, который содержит список компонентов и выдаёт их копию во время каста. На каждом персонаже есть "книга заклинаний" - скрипт содержащий список рецептов. Когда, игрок или ИИ выбирает заклинание, ссылок на рецепт пересылается через систему боя в spell engine, вместе с ссылкой на кастера и цель заклинания. Spell engine инициилизирует полученный список компонентов, раздач каждому ссылку на себя и следующий компонент. После чего он запускает первый компонент. Каждый компонент либо начинает корутины на движке, либо выполняется мгновенно и запускает следующий компонент. При каждом последующем обновлении, движок проверяет закончились ли все корутины, и если да, то заканчивает заклинание. Никаких синглтонов для этого не нужно. Для движков было решено использовать пул, так как одновременно может выполняться неопределённое количество заклинаний от одного кастера одновременно.
1
Автор поста оценил этот комментарий

Как насчёт бартера?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Звучит не плохо, но тогда мой проект будет писать художник.
1
Автор поста оценил этот комментарий

Мне кажется игре больше подходит осада крепостей, бои 1000 на 1000.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Эээ не. Это совершенно другой подход к игре нужен будет. То, как она реализована сейчас (персонажи с полной кастомизацией, и индивидуальным интеллектом) ни за что не потянет большое количество персонажей на экране. Да и концепт игры совсем другой.
1
Автор поста оценил этот комментарий

На мой взгляд, TDD для простых проектов неоправдан и лишь удваивает объем работы. Особенно, если проект действительно небольшой и разрабатывается небольшой командой.
Почему спросил - я не могу додумать, что на самом деле можно покрыть тестами в игровом проекте, кроме core-механик. Единственное, что пришло в голову: расчеты урона, поведение конечных автоматов.

... невнимательно прочитал пост - увидел, что от TDD в проекте было решено отказаться.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Да, бытует такое мнение, что протестировать можно только холодные цифры, но это не совсем правильно. Тест, по сути, это способ убедиться, что что-то в твоём коде даёт определённый результат. Например, ты можешь протестировать самонаводящицся фаерболл, ускорив в тесте время в несколько десятков раз и проверив по завершению, что фаерболл попал в цель или нанёс ей урон или просто оказался в желаемой позиции в мире. Более того, есть и более продвинутые тесты, которые проводятся автоматически во время тест-плея.
Далее, почему тесты полезны особенно в более простых проектах? По нескольким причинам.
1. Там все должно очень просто тестироваться. Если не просто, значит проблема со структурой твоего кода. Тесты будут гарантировать грамотную структуру твоего кода.
2. Изменив ранее протестированный или зависящий от него код, ты сразу можешь проверить не закрался ли в него баг с новыми изменеиями?
3. Тесты могут заменить документацию. Если ты давно не притрагивался к проекту и все забыл, либо новый программист присоединился к команде, прочитав тест, он может понять за что отвечает определённый кусок кода.

Вобщем, тебе так или иначе придётся тестировать игру. Обычно мы это делаем ручками, запускаем игру, доходим до нужного момента, повторяем определённое действие, пока не убедимся, что все работает. На это уходит куча времени в процессе разработки. А тесты позволяют сократить это время до нескольких секунд и они всегда будут давать гарантированный результат.
показать ответы
2
Автор поста оценил этот комментарий
Привет, дай контакты свои. Есть желание поработать
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Если дискорд устраивает, то: dlich#9427
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества