Jump to content
Sign in to follow this  
Antonio261

Transición de Animación a Ragdoll

Recommended Posts

Muy buenas, compañeros de la comunidad de UnitySpain.

Estoy haciendo un juego y ando atascado en una parte. Querría saber si alguien puede echarme una mano.

Tengo un muñeco animado y al hacer click sobre él quiero que pase a ser Ragdoll. Prácticamente es el mismo efecto de disparar y morir que se usa en muchos videojuegos de acción, pero yo no quiero la animación de morir.  He intentado que el mismo muñeco animado ya tenga el Ragdoll oculto y simplemente lo active cuando haga click sobre él. Pero no he encontrado la manera ya que los elementos como RigidBody y CharacterJoin no se pueden activar y desactivar a voluntad y tampoco funciona la animación si tengo los elementos del Ragdoll en el mismo muñeco.. No he conseguido aún otra manera que la de instanciar el otro muñeco igual pero con el Ragdoll puesto, de modo que tengo el muñeco en la escena animado, y otro a la espera de ser instanciado con el Ragdoll.  Sin embargo, no es el resultado que deseo puesto que al instanciar queda un poco falso y se ve claramente cómo el nuevo muñeco aparece y desfallece. Quiero que sea el mismo muñeco el que tenga la animación y el ragdoll para poder alternar de uno al otro fácilmente. ¿Alguien sabe cómo puedo hacerlo?

He hecho un video para que veáis lo que digo.

 

Un saludo y gracias por leerme.

 

Share this post


Link to post
Share on other sites

Lo que tienes que hacer es obtener todos los Rigidbody de los huesos.

m_bones = GetComponentsInChildren<Rigidbody>();

 Luego cuando quieres activar/desactivar el ragdoll simplemente cambias el valor de isKinematic

foreach (Rigidbody rbBone in m_bones) 
{ 
	rbBone.isKinematic = IsRagdoll; 
}

 

Share this post


Link to post
Share on other sites
2 hours ago, francoe1 said:

Lo que tienes que hacer es obtener todos los Rigidbody de los huesos.


m_bones = GetComponentsInChildren<Rigidbody>();

 Luego cuando quieres activar/desactivar el ragdoll simplemente cambias el valor de isKinematic


foreach (Rigidbody rbBone in m_bones) 
{ 
	rbBone.isKinematic = IsRagdoll; 
}

 

Gracias por responder.

No entiendo bien la última línea. No entiendo "IsRagdoll" de dónde sale. ¿Se puede acceder al ragdoll a través de iskinematic? Dentro de Riggidboy no me sale la opción de activar/desactivar el ragdoll. De hecho no me sale ragdoll por ninguna parte. Hice manualmente lo de añadir a cada hueso su Rididbody, Collider y CharacterJoint, que entiendo que son los elementos necesarios para que sea ragdoll.

Share this post


Link to post
Share on other sites

IsRagdoll es una variable booleana, ya que isKinematic es una propiedad booleana.

Cada hueso que conforme el ragdoll debe tener un rigidbody, ese rigidbody se puede activar y desactivar utilizando la propiedad isKinematic (true cuando quieres que no responda a las fisicas).

Entendiendo esto, para que el ragdoll este activo deberas activar todos los rigidbodys de los huesos (isKinematic = true)

Intenta agregar este componente al personaje y dime si funciona.

using UnityEngine;

public class Ragdoll : MonoBehaviour
{
    private Rigidbody[] m_rigidbodiesBones { get; set; }

    private void Start()
    {
        m_rigidbodiesBones = GetComponentsInChildren<Rigidbody>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q)) ActiveRagdoll(true);
        if (Input.GetKeyDown(KeyCode.E)) ActiveRagdoll(false);
    }

    public void ActiveRagdoll(bool value)
    {
        foreach (Rigidbody rigidbody in m_rigidbodiesBones)
            rigidbody.isKinematic = !value;
    }
}

 

Share this post


Link to post
Share on other sites

Sí. Va genial ahora. Por lo que dijiste, el rigidbody no afecta al muñeco animado hasta que desactivamos el isKinematic, y entonces el ragdoll hace su trabajo. No había caído en eso hasta ahora. Lo puse de una manera algo distinta que como lo escribiste pero funciona igual:

 hueso1.isKinematic = false;
 hueso2.isKinematic = false;
 hueso3.isKinematic = false;
etc

Y esto, como bien dijiste, activa los rigidbody de todos los huesos y hace al muñeco ragdoll.

Muchas gracias por la ayuda:)

Dejo video como prueba de que funciona.

  • Thanks 1

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...