Попадание в кости

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

Попадание в кости

Сообщение infernal 04 май 2013, 19:23

Добрового времени суток,
В общем, вопрос о костях, а именно:
У меня есть модель со скелетом, мне нужно чтобы при попадании в неё луча Raycast (hit.point), эта кость скажем выводилась в какую нибудь пременную, через которую в дальнейшем можно будет обращаться, а лучше чтобы при определении этой кости, играла соответсвующая анимация, всё это нужно реализовать через скрипт. Почитал справку, полазил по форумам, нашёл что якобы кости те же gameobject, вопрос: Можно ли тогда их определять через hit.collider.name, и задавать им отдельно силу?
Для победы зла, нужно чтобы добро бездействовало
Аватара пользователя
infernal
UNIт
 
Сообщения: 65
Зарегистрирован: 10 сен 2012, 14:29

Re: Попадание в кости

Сообщение nile 04 май 2013, 20:20

Я своему персу приделывал Ragdoll. Он автоматически вешает Capsule Collider на каждую из ключевых костей. А уж там отследить куда попал - не проблема.
Аватара пользователя
nile
Старожил
 
Сообщения: 848
Зарегистрирован: 25 фев 2011, 17:17

Re: Попадание в кости

Сообщение infernal 05 май 2013, 05:43

Спасибо, если бы можно было ставить плюсы (ну или лайки) давно б поставил
Для победы зла, нужно чтобы добро бездействовало
Аватара пользователя
infernal
UNIт
 
Сообщения: 65
Зарегистрирован: 10 сен 2012, 14:29

Re: Попадание в кости

Сообщение infernal 05 май 2013, 10:52

Извините, ещё маленький вопрос, при использовании Рэгдолла и анимации на одной модели, получается что при окончании анимации и перед началом её запуска модель дёргается, то есть срабатывает рэгдолл, происходит всё в течении одного кадра (я так думаю), но это заметно, как можно исправить?, ну наверное надо отключить рэгдол, но как это отключить сразу на всех костях?
Для победы зла, нужно чтобы добро бездействовало
Аватара пользователя
infernal
UNIт
 
Сообщения: 65
Зарегистрирован: 10 сен 2012, 14:29

Re: Попадание в кости

Сообщение nile 05 май 2013, 11:33

Галочка IsKinematic у Rigidboby на каждой из кости собственно отключает этот Rigidboby. То есть пока играет анимация, Rigidboby отключен. Тогда и рывков не должно быть.

Чтобы на всех костях, нужен скрипт с массивом Rigidboby, где при выключении он пробегает по массиву и включает iskinematic.

Кстати, в анимации вроде должна стоять галочка Amimate Physics
Аватара пользователя
nile
Старожил
 
Сообщения: 848
Зарегистрирован: 25 фев 2011, 17:17

Re: Попадание в кости

Сообщение infernal 05 май 2013, 12:42

Вот по примеру найденного мной скрипта написал свой более упрощённый
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class RagdollController : MonoBehaviour {
       
        public Rigidbody[] rigidbodies; //массив с костями у которых компонент Rigidbody
       
        public float delay = 5; //задержка(просто для проверки, повесьте скрипт на вашу анимированную модель и подождите 5 секунд)
       
        // Use this for initialization
        void Start () {
               
                Invoke("Ragdoll",delay); //Запуск функции Ragdoll через delay
                }
       
        public void Ragdoll(){
               
                rigidbodies = GetComponentsInChildren<Rigidbody>();
//Все кости с компонентом Rigidbody добавляем в массив(если нет на кости Rigidbody, она не добавится)
       
                foreach(Rigidbody rigidbody in rigidbodies){ //Включаем\Выключаем Кинематику
                        rigidbody.isKinematic = !rigidbody.isKinematic;
                }
        }
}
 


Думаю справедливо будет указать ссылку на источник http://unity3d.ru/distribution/viewtopic.php?f=18&t=14391&p=104447&hilit=%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82+iskinematic#p104447

И если не затруднит объяснить что значит строчка
Синтаксис:
Используется javascript
 rigidbody.<span class="posthilit">isKinematic</span> = false;

Мне прям покоя не даёт
Для победы зла, нужно чтобы добро бездействовало
Аватара пользователя
infernal
UNIт
 
Сообщения: 65
Зарегистрирован: 10 сен 2012, 14:29

Re: Попадание в кости

Сообщение infernal 05 май 2013, 12:50

Вместо последней строчки можно использовать
Синтаксис:
Используется csharp
rigidbody.active = !rigidbody.active; //Включаем\Выключаем Rigidbody
Для победы зла, нужно чтобы добро бездействовало
Аватара пользователя
infernal
UNIт
 
Сообщения: 65
Зарегистрирован: 10 сен 2012, 14:29

Re: Попадание в кости

Сообщение nile 05 май 2013, 13:30

rigidbody.<span class="posthilit">isKinematic</span> = false;


Не что иное, как косяк форматирования текста на сайте.
Должно быть так: rigidbody.isKinematic = false; //собственно отключает кинематику у RB


На счет rigidbody.active = !rigidbody.active; фиг знает, никогда так не делал. В туторилах по анимации квлючают кинематику на время проигрывания анимации и выключают, когда тело должно упасть как тряпка. Но если это работает, то можно и так, я думаю.
Аватара пользователя
nile
Старожил
 
Сообщения: 848
Зарегистрирован: 25 фев 2011, 17:17


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

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

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