Accueil Forums J’ai besoin d’aide Unity3D [Aide Script] Activer / Désactiver le Ragdoll + Exercice ;)

Ce sujet a 1 réponse, 2 participants et a été mis à jour par  Dpg, il y a 1 semaine et 5 jours.

2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Messages
  • #2053

    Zhass
    Participant

    Bonjour à tous,

    Ayant fait de nombreuse recherches sur Internet pour savoir comment désactiver / Activer le ragdoll d’un personnage n’importe quand et n’ayant pas trouvé de choses concrètes, je me suis lancé à créer un script perso 🙂

    Je viens ici pour vous le partager au cas ou que ça vous sera utile 🙂

    donc c’est parti !

      Désactiver ragdoll


    void disableRagdoll(Transform objectToCheck)
    {
    //Ré Activer Animator
    if (objectToCheck.gameObject.GetComponent<Animator>() != null)
    {
    objectToCheck.gameObject.GetComponent<Animator>().enabled = true;
    }

    for (int i=0; i<objectToCheck.childCount; i++)
    {
    if (objectToCheck.GetChild(i).transform.childCount > 0)
    {
    disableRagdoll(objectToCheck.GetChild(i)); //Récursivité : on rappel cette fonction sur les enfants des enfants…

    if (objectToCheck.GetChild(i).GetComponent<Rigidbody>() != null)
    {
    //Désactiver Box/Capsule/Sphere Colliders des enfants des enfants… (avant bras, jambes…)
    if (objectToCheck.GetChild(i).GetComponent<BoxCollider>() != null)
    {
    objectToCheck.GetChild(i).GetComponent<BoxCollider>().enabled = false;
    }
    else if (objectToCheck.GetChild(i).GetComponent<CapsuleCollider>() != null)
    {
    objectToCheck.GetChild(i).GetComponent<CapsuleCollider>().enabled = false;
    }
    else if (objectToCheck.GetChild(i).GetComponent<SphereCollider>() != null)
    {
    objectToCheck.GetChild(i).GetComponent<SphereCollider>().enabled = false;
    }

    //Désactiver RigidBodys des enfants des enfants
    objectToCheck.GetChild(i).GetComponent<Rigidbody>().isKinematic = true;
    }
    }
    }
    }

      Activer Ragdoll

    Pareil mais en inverse 🙂


    void enableRagdoll(Transform objectToCheck)
    {
    //Désactiver Animator
    if (objectToCheck.gameObject.GetComponent<Animator>() != null)
    {
    objectToCheck.gameObject.GetComponent<Animator>().enabled = false;
    }

    for (int i=0; i<objectToCheck.childCount; i++)
    {
    if (objectToCheck.GetChild(i).transform.childCount > 0)
    {
    enableRagdoll(objectToCheck.GetChild(i)); //Récursivité…

    if (objectToCheck.GetChild(i).GetComponent<Rigidbody>() != null)
    {
    //Activer Box/Capsule/Sphere Colliders des enfants des enfants…
    if (objectToCheck.GetChild(i).GetComponent<BoxCollider>() != null)
    {
    objectToCheck.GetChild(i).GetComponent<BoxCollider>().enabled = true;
    }
    else if (objectToCheck.GetChild(i).GetComponent<CapsuleCollider>() != null)
    {
    objectToCheck.GetChild(i).GetComponent<CapsuleCollider>().enabled = true;
    }
    else if (objectToCheck.GetChild(i).GetComponent<SphereCollider>() != null)
    {
    objectToCheck.GetChild(i).GetComponent<SphereCollider>().enabled = true;
    }

    //Activer RigidBodys des enfants des enfants…
    objectToCheck.GetChild(i).GetComponent<Rigidbody>().isKinematic = false;
    }
    }
    }
    }

    Voilà 🙂 j’espère que ça va vous être utile ! 🙂

    Si vous avez bien suivi vous auriez du voir que ces deux fonctions peuvent être réunie en une seule 😉

    Je vous laisse le faire, un petit exercice ne fait pas de mal, bonne chance !

    #2080

    Dpg
    Participant

    Super intéressant comme script, je le testerai surement. Une vrai galère de désactiver/activer le Ragdoll !

    Merci.

2 sujets de 1 à 2 (sur un total de 2)

Vous devez être connecté pour répondre à ce sujet.