Animator. Смена клипа или слоя в рантайме

Общие вопросы о Unity3D

Animator. Смена клипа или слоя в рантайме

Сообщение Receptor 27 авг 2013, 22:17

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

Есть аниматор в два слоя, который блендится по маске (Body Mask), первый слой анимирует все, кроме рук, руки анимирует второй. Так вот столкнулся с проблемой: как быть, если оружия планируется много, и для каждого скорее всего будет своя структура стэйтов и соотвестенно клипы анимаций.

Изображение


Можно ли каким-либо образом, произвести например слияние слоев из двух контроллеров? Или заменить у контроллера слой, на слой из другого контроллера. Или стэйты менять? Или как? Подскажите, а то делать кучу стэйтов для каждого оружия, как-то не удобно совсем, учитывая тот факт, что у 90% оружия структура анимирования одинаковая. :|
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск

Re: Animator. Смена клипа или слоя в рантайме

Сообщение Strannik 28 авг 2013, 00:24

Если машина анимационных состояний одинакова для каждого вида оружия, то BlendTree юзать. Если отличается, то подумать как минимизировать отличия и юзать BlendTree :)
Тип оружия - параметр, который будет блендиться в дереве. Ну а смену значения параметра "тип оружия" делать в стейте смены оружия (там тоже есть свои тонкости).


По поводу слияния.
Пока менять что либо в контроллере в рантайме скорее всего не получиться. Если не ошибаюсь, то там используется общий инстанс и его изменение отразиться на всех ботах, использующих данный контроллер, да еще и изменения сохранятся в ассете. Можно сам контроллер заменить, но не знаю как это на fps скажется в момент смены.
Приемы при проектировании архитектуры игр
Mecanim: чтение дополнительной информации из стейтов
Mecanim: копирование blendTree
Strannik
UNIт
 
Сообщения: 93
Зарегистрирован: 26 апр 2012, 22:30
Откуда: Омск

Re: Animator. Смена клипа или слоя в рантайме

Сообщение Receptor 28 авг 2013, 11:05

Если не ошибаюсь, то там используется общий инстанс и его изменение отразиться на всех ботах

Вот об этом я даже и не подумал. Точно.

Можно сам контроллер заменить

Думаю накладно будет. Да и не удобно, если мне например надо будет изменить что-то в слое Base - придется у всех 100500 менять :)

Наверное придется все же делать кучу BlendTree и параметр Int, который будет текущий индекс в массиве моих оружий. Правда плохо, что в условиях TransitionState у Int и Float есть только Greater и Less, добавили бы Equal :)

Спасибо!
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск

Re: Animator. Смена клипа или слоя в рантайме

Сообщение seaman 28 авг 2013, 11:17

У Int есть Equal и NotEqual. Float сравнивать на равенство вообще не рекомендуется. Равенства двух float можно никогда не получить из-за ошибок округления.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Animator. Смена клипа или слоя в рантайме

Сообщение Receptor 28 авг 2013, 13:26

У Int есть Equal и NotEqual. Float сравнивать на равенство вообще не рекомендуется. Равенства двух float можно никогда не получить из-за ошибок округления.


Действительно. Я видимо с флотом перепутал, т.к. Int еще не приходилось юзать :-? Спасибо.

По поводу сравнивания с плавающей точкой, можно же вот так (int)float - будет точно округляться? Less 1.25f и Greater 0.75.f будет 1 при конвертации в Int по идее. Но конечно же так не делается, я согласен.
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск

Re: Animator. Смена клипа или слоя в рантайме

Сообщение Strannik 28 авг 2013, 19:14

только учтите, что в blentree можно только float использовать.

можно конечно для float проверки типа Less 1.25f и Greater 0.75.f писать в условиях переходов, но как то накладно.
Другой вариант заводить еще и второй параметр - int, который будет использоваться в переходах.
Приемы при проектировании архитектуры игр
Mecanim: чтение дополнительной информации из стейтов
Mecanim: копирование blendTree
Strannik
UNIт
 
Сообщения: 93
Зарегистрирован: 26 апр 2012, 22:30
Откуда: Омск

Re: Animator. Смена клипа или слоя в рантайме

Сообщение Receptor 28 авг 2013, 19:36

Не, я думаю о том, что бы делать несколько блендтри для каждого оружия, а нее внутри одного блендить между несколькими оружиям, т.е. для каждого оружия бленд три, эти стэйты (блендтри) блендятся интами, а внутри стэйтов уже юзать соответсвенно флот.



И раз уж пошла такая пляска, хочу еще поинтересоваться по поводу смены и скрывания оружия, как это обычно должно выглядить? Вот например, перс у меня начинает лезть по лестнице вертикальной, нужно руки освободить ему, что бы он цеплялся, так вот куда оружия девать, просто если скрыть его, никто не докапается? :D
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск

Re: Animator. Смена клипа или слоя в рантайме

Сообщение seaman 28 авг 2013, 20:01

Зависит от игры. Я тут беседовал с одним. У него в магазине реальные патроны, которые вылетают из стола. их можно из магазина достать, положить...
В его случае - точно надо анимацию убирания оружия в кобуру/за плечо...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Animator. Смена клипа или слоя в рантайме

Сообщение Receptor 29 авг 2013, 00:20

Ого. Не, ну у меня не так все дотошно :D Ну тем более для мультиплеерной игры под браузер это не так важно, я думаю
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск


Вернуться в Общие вопросы

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

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