Доброго всем времени суток! Есть моделька со скелетом. В ней есть анимация и всё хорошо. При смерти решил использовать RagDoll. Так как стандартные средства юнити сразу создают все необходимые компоненты (Коллайдеры, RigidBody и CharachterJoint), пришёл к выводу, что проще будет в нужный момент создавать такой же набор динамически. Попытки оказались провальными. Встал вопрос, может возможно как-то уже созданные физические объекты сделать неактивными? Enabled у них в свойствах нет... отсюда вопрос, как сделать так, чтоб Движок на них не реагировал?
seaman, да, раньше у меня и было сделано простой подменой модели, так как не подразумевалась кастомизация персонажей. Сейчас было большое обновление в этом направлении и теперь система принципиально отличается: у меня есть анимированный скелет без меша вообще и множество различных заскинненых мешей, который удочеряются к базоваму скелету и соответственно перенимают его анимацию. Поэтому хотелось бы в нужный момент просто включать "куклу" на базовом скелете. За ссылку благодарю, попробую этот вариант!
"да, раньше у меня и было сделано простой подменой модели, так как не подразумевалась кастомизация персонажей. Сейчас было большое обновление в этом направлении и теперь система принципиально отличается: у меня есть анимированный скелет без меша вообще и множество различных заскинненых мешей, который удочеряются к базоваму скелету и соответственно перенимают его анимацию. Поэтому хотелось бы в нужный момент просто включать "куклу" на базовом скелете. За ссылку благодарю, попробую этот вариант!"
А разве нельзя заранее на этом скелете создать рэгдолл, поставить isTrigger костям и isKinematic, потом
У меня всё получилось вот так:
public Transform[] bones = new Transform[11]
void Start(){ foreach(var b in bones){ b.rigidbody.isKinematic = true; b.collider.isTrigger = true; } } void Update(){ if(Input.GetKeyDown(KeyCode.V)){ foreach(var b in bones){ b.collider.isTrigger = false; b.rigidbody.isKinematic = false; animation.enabled = false; // Отключаем компонент animation на персонаже
} }
Сообщение отредактировал ilyakos - Пн, 24 Ноя 2014, 00:41
ilyakos, сейчас нет возможности проверить, но мне прям вот даже интересно, а вы сами пробовали свой скрипт? Я ничего не хочу сказать, может я не прав? но на сколько мне известно кинематическая риджидбоди кушает ресурсы на просчёт симуляции физики не многим меньше не кинематической. Поэтому с точки зрения оптимизации вариант не самый лучший ИМХО. Но если я не ошибаюсь, поправьте меня. Потому как я уже разработал процентов на 80 систему динамического создания и уничтожение куклы на действующей модели. И если вариант с присвоением isKinematic true не сильно повлияет на производительность (я помешан на оптимизации), то, конечно, он был бы проще. Для справки: данную систему собираюсь использовать на всех моделях в игре (не только главного персонажа, но и всех НПС и монстрах), отсюда и вопрос производительности.
Не знаю, чем это может больше грузить систему, чем замена модели рэгдоловой..
Фактом одновременного существования большого количества rigidbody на сцене. Я почему и сказал, что могу ошибаться и чтоб меня поправили если это так. Но на сколько я помню, даже кинематическая rigidbody участвует в процессе просчёта физики - а это уже проблема.
Но за подсказку всё равно спасибо!
Добавлено (24 Ноя 2014, 11:19) --------------------------------------------- seaman, посмотрел, кстати, компонент, но он, по совести, делает тоже самое: просто подменяет модель.
Сообщение отредактировал NapalmRain - Пн, 24 Ноя 2014, 11:19
Ну, говорят, что любые ригидбоди тормозят. Для кинематик советуют двигать не трансформом, а самим ригидбоди (Rigidbody.position, Rigidbody.rotation). Причем ссылку на ригидбоди - кешировать. Говорят так значительно быстрее. Я не проверял.