Во время "зимних каникул" нашлось время для написания маленького тутора по UML и как его можно использовать в геймдеве.
Мы создадим несколько UML диаграмм для юнити-проекта написанного на .
Введение
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 на
Исходный проект на взял отсюда http://forum.unity3d.com/viewtopic.php?t=28433&highlight=unity+jump+start
мой проект на 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
На самом деле подобная диаграмма подойдет для доброй половины игр.
Вообще в этом деле необходимо не переусердствовать – все таки (ИМХО) код важнее диаграмм.
Да и время, потраченное на создание модели может превзойти сам кодинг.
Диаграммы - это только еще один уровень абстракции. Наглядно отображают процессы, происходящие в системе.
Вот, нашел картинку на просторах инета:
Какой из вариантов вам подойдет – выбирайте сами
Если есть вопросы, с удовольствием отвечу.