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

Ce sujet a 2 réponses, 2 participants et a été mis à jour par  Dpg, il y a 1 mois et 4 semaines.

3 sujets de 1 à 3 (sur un total de 3)
  • 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.

    #2152

    Dpg
    Participant

    Salut, j’ai testé ton script et il fonctionne super bien, ça change des animations de base.

    Mais j’ai quand même des erreurs de compilations.

    J’ai donc créé un nouveau script pour y mettre ton script, que j’ai ajouté à mon ennemi.

    Au Start j’ai mis: GetComponent<Ragdoll_Script>().disableRagdoll(this.transform);
    A une fonction qui test la mort de l’ennemi: GetComponent<Ragdoll_Script>().disableRagdoll(this.transform);

    Du coup j’ai erreurs, je pense qu’il n’aime pas le ‘this.transform’.
    Que met tu lorsque tu appel tes fonctions ?

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

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