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

Научился сам? Помоги начинающему.

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

Сообщение mvladlin 20 янв 2010, 16:15

Во время "зимних каникул" нашлось время для написания маленького тутора по 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

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

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

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

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

Если есть вопросы, с удовольствием отвечу. ;)
Аватара пользователя
mvladlin
UNIт
 
Сообщения: 112
Зарегистрирован: 11 июл 2009, 19:53
Откуда: MO

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

Сообщение ffinder 20 янв 2010, 17:03

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

После столь "злостной тирады" не нужно думать, что я противник хорошей документации или грамотного проектирования. Но всем этим приблудам не хватает, как говорят наши зарубежные коллеги, "бесшовной интеграции", т.е. не "диаграмы отдельно, код отдельно", а когда диаграмы и есть сам язык, по крайней мере с поддержкой в IDE.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

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

Сообщение mvladlin 20 янв 2010, 17:59

1. У любого языка/технологии есть недостатки, даже у юнити :) но это не останавливает нас, правильно?
2. Насчет "когда диаграмы и есть сам язык" - согласен, но пока это только мечта многих девелоперов.
Аватара пользователя
mvladlin
UNIт
 
Сообщения: 112
Зарегистрирован: 11 июл 2009, 19:53
Откуда: MO

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

Сообщение ffinder 20 янв 2010, 18:25

годится для единоразовой генерации "скелета". потом наступает generate-reverse, с которым совершенно не выгодно морочится. ИМХО.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

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

Сообщение mvladlin 20 янв 2010, 18:37

generate-reverse, с которым совершенно не выгодно морочится.

про гемор с generate у меня тоже написано
Аватара пользователя
mvladlin
UNIт
 
Сообщения: 112
Зарегистрирован: 11 июл 2009, 19:53
Откуда: MO

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

Сообщение Whitebear 20 янв 2010, 20:14

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

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

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

Сообщение ffinder 20 янв 2010, 23:09

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

Вот,Whitebear, вы в начале рассуждений со мной не согласились, а в конце согласились ;)
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

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

Сообщение Blitz 24 янв 2010, 20:12

помнится в Blender GE есть такая штука, только там на питоне кодить надо, другие ЯП не поддерживает
имхо подойдёт идеально для организации диздока с доп. информацией
-что ты тут делаеш?
-да так, бегаю да кровь полакиваю
(с) Дневник вампира. José Andrade.
Blitz
UNец
 
Сообщения: 31
Зарегистрирован: 12 дек 2009, 16:49

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

Сообщение cinemaizer 28 фев 2010, 14:15

Вот еще по теме:
В общем: http://dtf.ru/articles/list.php?tid=art ... gamedesign
и в частности: http://dtf.ru/articles/read.php?id=44070
Don't worry! Be happy!
cinemaizer
UNец
 
Сообщения: 12
Зарегистрирован: 18 фев 2010, 13:58
Откуда: Магнитогорск
  • ICQ

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

Сообщение gate1 06 апр 2012, 10:51

Спасибо за статью!
Аватара пользователя
gate1
UNITрон
 
Сообщения: 198
Зарегистрирован: 27 дек 2011, 22:19
Откуда: Минск

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

Сообщение fatboy 26 май 2012, 22:27

Очень удобно реализована работа с UML в среде разработки Visual Studio.
"Опасайтесь программистов, носящих с собой отвертки!"
Леонард Брендвайн
_ttp://unity3dforge.com
Аватара пользователя
fatboy
UNец
 
Сообщения: 8
Зарегистрирован: 22 апр 2012, 12:33
Откуда: Родной город - Луцк, Украина
  • ICQ


Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2