Мегаобучалка Главная | О нас | Обратная связь


Работа с тегами Mannequin editor в коде



2015-12-08 215 Обсуждений (0)
Работа с тегами Mannequin editor в коде 0.00 из 5.00 0 оценок




Те, кто хоть раз сталкивался с маникен эдитором явно интересовался каким образом работают установленные там теги и по какому принципу проигрываются анимации при разных группах тегов.

Рисунок 1Окно Manequin Editor

Как вы могли заметить, на скриншоте видно несколько FragmentID: hit, grab, hold и тд. Раскрывая данные фрагменты вы можете увидеть другие вложения. Эти вложения как раз-таки и формируются из установленных тегов. В конце каждой ветви дерева тегов будет лежать сам Fragment Entity, в котором задаются различные плюшки – анимации и её параметры. На скриншоте это Option 1.

Окей, это было начало теперь самое интересное. Для того что бы движок обрабатывал ваши собственные теги и задавал их в нужный момент времени вам нужно, разумеется, их где-то объявить. Для этого открываем PlayerAnimation.h и ищем объявление макро команды

#define MAN_PLAYER_TAGS ( f ) \

 

Рисунок 2 Файл PlayerAnimation.h

Здесь, после дефолтных объявлений, мы можем добавить свой тег простой командой:

f( myTag )

Хочу заметить, что в строчке выше, перед вашим объявлением, нужно поставить символ \ после макро команды(см. работа с макросами С++).

Готово. Наш тег определен. Далее для активации/деактивации тега в нужный момент мы должны вызвать соответствующую функцию. Для этого в вашем коде, например у вас есть собственный класс оружия, нужно прописать следующий код:

CItem* pItem = (CItem*)g_pGame->GetIGameFramework()->GetClientActor()->GetCurrentItem();

IActionController *pActionController = pItem ? pItem->GetActionController() : NULL;

if (!pActionController)

return;

 

SAnimationContext &animContext = pActionController->GetContext();

animContext.state.Set(PlayerMannequin.tagIDs.myTag, true);

 

Немного комментариев к данному коду

В первой строчке мы получаем указатель на текущее оружие игрока. Затем получаем указатель на экшен контроллер данного айтема.

Следующий шаг получение контекста анимаций.

После того как мы получили объект контекста анимаций нам достаточно обратиться к состоянию тегов(state) и установить нужный нам тег функцией Set(), которая принимает ид тега и флаг установить либо убрать.

 

Советую вынести эту процедуру в отдельную функцию:

//-------------------------------------------------------------------

void MyWeaponСlass::SetTag(uint32 id, bool set)

{

m_pItem = (CItem*)g_pGame->GetIGameFramework()->GetClientActor()->GetCurrentItem();

IActionController *pActionController = m_pItem ? m_pItem->GetActionController() : NULL;

if (!pActionController)

return;

 

SAnimationContext &animContext = pActionController->GetContext();

animContext.state.Set(id, set);

m_pItem->SetFragmentTags(animContext.state);

}

 

Компилируем код, и открываем редактор и заходим в маникен эдитор.

После того, как маникен эдитор загрузится, открываем окно Tag definition editor. В левой колонке представлены файлы, в которых описаны теги. В принципе вы можете создать свой файл. В своем примере я буду использовать itemTags.xml.

Создадим новый тег одноименный тому, который мы определили в PlayerAnimation.h – myTag.

Далее сохраняем изменения и перезагружаем движок.

Кстати, в некоторых версиях не удается сохранить изменения и для этого иногда требуется ручками прописать нужный тег в соотвественном файле. Это не сложно, структура файла элементарна для рядового крайэнджиста :D

Теги лежат в папке GameSDK/ Animations/Mannequin/ADB/

 

Все, осталось выбрать тег в соответствующем Fragment Entity.

 

 

Примечание: для дебага тегов используйте команду mn_debug dude

 



2015-12-08 215 Обсуждений (0)
Работа с тегами Mannequin editor в коде 0.00 из 5.00 0 оценок









Обсуждение в статье: Работа с тегами Mannequin editor в коде

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (215)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.005 сек.)