Страница 1 из 1

Проектирование игр при помощи UML

СообщениеДобавлено: 20 янв 2010, 16:15
mvladlin
Во время "зимних каникул" нашлось время для написания маленького тутора по UML и как его можно использовать в геймдеве.
Мы создадим несколько UML диаграмм для юнити-проекта написанного на (c#).

Введение
UML это унифицированный язык моделирования для описания систем. Грубо говоря, любую систему (а игра это тоже система) можно описать графически при помощи диаграмм.
UML диаграммы обычно строят бизнес-аналитики и другой около айтишный люд (причем, этот народ, часто ничего не понимает в программировании) от них нужно только, чтобы они правильно перенесли на диаграммы, процессы происходящие в исследуемой организации.
Получившаяся модель (куча диаграмм) передается в отдел разработки (программистам или, если все вообще круто, архитекторам). Отдел разработки собственно и создает программный продукт. Вот вкратце так.

UML и gamedev
В основном игроделы не используют UML, оно и понятно - никаких исследований бизнес-процессов не проводится, но данная технология, в некоторых случаях, может быть полезна для геймдевелопинга.
Например:
1. Если проект большой – тяжело разбираться с кучей скриптов.
2. Если над проектом работают более 1 человека – и например, нужно согласовать некоторые детали проекта или быстро ввести в курс дела нового члена команды.
3. Диздок игры получается намного информативней, если в ней есть диаграммы.

И самое интересное - UML можно внедрить на любом этапе создания проекта.
В некоторых UML-редакторах есть такая штука - reverse engineering (это восстановление UML-диаграмм по исходному коду).

Существует много разных UML-редакторов (платных и бесплатных) я в основном работаю на Enterprise Architect он может «кушать» с# файлы (и много других форматов, но javascript и boo нет). И главное в нем есть reverse engineering. Насчет цены данного ПО, то оно не превышает 10тыс. рублей, если сравнивать с другими подобными программами, такого же уровня, то цена на порядок дешевле.
Еще раз напомню, что есть и бесплатные UML-редакторы, но я не встречал в них реверс инжин.

Пример использования
Представим, что у нас есть некий проект и нам необходимо построить пару UML-диаграмм.
Я переписал проект Simple Space Shooter на (c#)
Исходный проект на (js) взял отсюда http://forum.unity3d.com/viewtopic.php?t=28433&highlight=unity+jump+start
мой проект на (c#) http://animatik.ru/upl/sss/SSScsharp.unitypackage

Теперь начнем:
Запустим ЕА (у меня версия 7.5) и создаем новый проект
Указываем место для сохранения, в появившемся окне можно не ставить галки, сразу нажать ОК
Изображение
В Project Browser добавим Package (что то типа папки)
Изображение
Имя можно выбрать любое, и view тоже
Изображение
Теперь добавим диаграмму
Изображение
Выбираем Class (это диаграмма классов)
Изображение
Выделяем диаграмму и выбираем команду Import c# Files (здесь видим другие поддерживаемые языки)
Изображение
Выбираем сразу все файлы из нашего юнити проекта
Изображение
После окончания процесса в окошке в конце появиться слово Complite!

Диаграмма классов готова!
Изображение
Можно расставить таблички покрасивее
Изображение
Что дает нам диаграмма классов – графическое отображение каждого класса и входящие в него свойства(атрибуты) и методы(операции)
Редактировать код можно прямо здесь, выбираем класс и нажимаем F12
Изображение
И еще не мало важно, что можно через некоторое время (после изменения кода другими редакторами) синхронизировать диаграмму классов с кодом:
Изображение
Ага, есть и Generate Code… это когда есть только диаграммы и на основании их генерируется код, но этот путь тернист – все равно получившийся код надо править вручную.

Теперь еще одну диаграмму добавим Activity
Изображение
Диаграмма активности (наиболее популярная UML-диаграмма) может показать действия (action) от начала и до конца процесса.

Из Toolbox вытащим на диаграмму элемент Initial
Изображение
В появившемся окне можно просто нажать ОК, или дать имя
Initial – это инициализация игры, после которой появляется главное меню.
Из Project Browser вытаскиваем mainMenuScript, только не сам класс а функцию:
Изображение
В Project Browser ниже появился Action, его лучше сразу переименовать, а то будет много элементов с именем OnGUI
Изображение
Теперь необходимо соединить Initial и первый Action – для этого служит Control Flow
Изображение
Протягиваем его от Initial к Action
Изображение
Дальше просто вытаскиваем функции из Project Browser и строим связи.
Можно добавлять Note для дополнительного пояснения.
Decision для ветвления.
Не забыть про Final.
Вот что у меня получилось:
Изображение
Я не использовал все функции (bullet, enemy) диаграмма получилась бы сложнее.
На диаграмме есть ошибки (два выхода из Loser и Winner), но для начального понимания и этого достаточно.
Проект EA: http://animatik.ru/upl/sss/sss.7z

На самом деле подобная диаграмма подойдет для доброй половины игр.

Вообще в этом деле необходимо не переусердствовать – все таки (ИМХО) код важнее диаграмм.
Да и время, потраченное на создание модели может превзойти сам кодинг.

Диаграммы - это только еще один уровень абстракции. Наглядно отображают процессы, происходящие в системе.

Вот, нашел картинку на просторах инета:
Изображение
Какой из вариантов вам подойдет – выбирайте сами

Если есть вопросы, с удовольствием отвечу. ;)

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 20 янв 2010, 17:03
ffinder
основная беда всего Унифицированного Языка Моделирования в том что он как-бы есть, и вот когда он есть, он как на корове седло :D
Потому что части языковых особенностей (а языки бывают разные) не поддержаны в UML, и потому что делать generate-reverse каждый раз мягко говоря накладно.
А про Activity Diagram отдельная песня - кода меньше, чем диаграм поясняющих его =))

После столь "злостной тирады" не нужно думать, что я противник хорошей документации или грамотного проектирования. Но всем этим приблудам не хватает, как говорят наши зарубежные коллеги, "бесшовной интеграции", т.е. не "диаграмы отдельно, код отдельно", а когда диаграмы и есть сам язык, по крайней мере с поддержкой в IDE.

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 20 янв 2010, 17:59
mvladlin
1. У любого языка/технологии есть недостатки, даже у юнити :) но это не останавливает нас, правильно?
2. Насчет "когда диаграмы и есть сам язык" - согласен, но пока это только мечта многих девелоперов.

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 20 янв 2010, 18:25
ffinder
годится для единоразовой генерации "скелета". потом наступает generate-reverse, с которым совершенно не выгодно морочится. ИМХО.

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 20 янв 2010, 18:37
mvladlin
generate-reverse, с которым совершенно не выгодно морочится.

про гемор с generate у меня тоже написано

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 20 янв 2010, 20:14
Whitebear
основная беда всего Унифицированного Языка Моделирования в том что он как-бы есть, и вот когда он есть, он как на корове седло :D
Потому что части языковых особенностей (а языки бывают разные) не поддержаны в UML

Долго читал эту сентенцию. Много думал. Ничего не понял.
UML - это язык моделирования. Причем моделирования любых объектно-ориентированных систем, даже и не связанных с программированием. Вы без труда можете на нем описать, например, проект строительства и использования клозета на бабушкином огороде. И UML не обязан в принципе ничего знать о языках программирования вообще и о их особенностях в частности. Иначе он перестанет быть универсальным средством проектирования. И уж тем более, UML не является средством графического программирования. То, что некоторые UML-ориентированные CASE-средства умеют по статическим диаграммам классов генерировать код на популярных языках программирования, и, наоборот, по исходным кодам генерировать диаграммы классов, - это их дополнительные фичи. Чего греха таить, я и сам, порой люблю в MS Visual Studio пособирать классы с помощью диаграммок, когда ломает руками из раза в раз писать однообразные каркасы. Но, основная цель UML, повторюсь, - графически изобразить архитектуру проекта, а не сгенерировать код.
Использовать UML для проектирования игр или нет - дело вкуса. Некоторые части движка, для лучшего понимания, на мой взгляд, лучше предварительно спроектировать на UML, но - это не догма. Рисовать же весь набор диаграмм для прикладной части для опытного девелопера - потеря времени, если только это не является обязательным требованием заказчика или командным соглашением.

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 20 янв 2010, 23:09
ffinder
Насчет универсальных систем - пустой файл - самая универсальная программа какая только может существовать. Но которая ничего не делает. Но потенциально может делать всё что угодно :D
Так и UML, описать можно всё (так утверждают авторы), а на практике даже код генерить необязательно (как утверждают сами авторы).

Вот,Whitebear, вы в начале рассуждений со мной не согласились, а в конце согласились ;)

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 24 янв 2010, 20:12
Blitz
помнится в Blender GE есть такая штука, только там на питоне кодить надо, другие ЯП не поддерживает
имхо подойдёт идеально для организации диздока с доп. информацией

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 28 фев 2010, 14:15
cinemaizer
Вот еще по теме:
В общем: http://dtf.ru/articles/list.php?tid=art ... gamedesign
и в частности: http://dtf.ru/articles/read.php?id=44070

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 06 апр 2012, 10:51
gate1
Спасибо за статью!

Re: Проектирование игр при помощи UML

СообщениеДобавлено: 26 май 2012, 22:27
fatboy
Очень удобно реализована работа с UML в среде разработки Visual Studio.