Page 1 sur 1

Bug activation/desactivation Ragdoll

Publié : 17 Déc 2021 23:08
par MekaZenis
Bonjour,
je poste ce soir ce message après quelques heures à ne pas comprendre le bug auquel je fais face.
Je suis débutant alors il est possible que la solution soit assez simple mais que je ne la connaissais juste pas; si vous pouvez me donner des conseils sur certaines choses pour optimiser ma façon de créer je vous en serais très reconnaissant.

Ce bug est assez incompréhensible pour moi, j'ai mis un ragdoll sur mon personnage, celui-ci est équipé d'un animator et d'un CharacterController pour que je puisse le contrôler grâce à un script 'MovementsPlayer' comme ci :
https://ibb.co/FzNvqH9 (la balise img ne fonctionnait pas dans la prévisualisation)
Image


Le petit jeu que je veux faire consiste à esquiver ou détruire des obstacles que je fais spawner à partir du GameObject 'Generateur' bien que pour le moment je souhaite seulement détecter une collision(ce que j'arrive à faire) et désactiver temporairement le Ragdoll pour simuler la perte d'une vie du joueur cependant plusieurs problème apparaissent à ce moment :
Tout d'abord au moment de la collision je désactive les composants 'Animator','CharacterController' et 'MovementsPlayer', à partir de ce moment la caméra ne suit pas le ragdoll(ce que j'ai essayer de lui faire faire en changeant son parent par le mesh de mon personnage, sans succès), elle reste au même endroit jusqu'à que l'attente de ma coroutine finisse, à ce moment je réactive mes composants et mon ragdoll qui n'était plus suivie par la caméra et qui était donc un peu plus loin(ayant subi la force de la collision)se téléporte à l'emplacement où il était au début de la collision.
Voici le code de mon script de collision :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Collisions : MonoBehaviour{

    private Animator Anim;
    private CharacterController Cc;
    private MovementsPlayer MovPlayerScript;

    public Transform DummyRig;

    private void Start() {
        Anim = this.transform.GetComponent<Animator>();
        Cc = this.transform.GetComponent<CharacterController>();
        MovPlayerScript = this.transform.GetComponent<MovementsPlayer>();
    }
    private void OnControllerColliderHit(ControllerColliderHit hit) {
        if(hit.transform.tag == "Projectiles"){
            Debug.LogWarning("You lost a life");
            StartCoroutine(RagdollModifier(3f));
        } 
    }

    IEnumerator RagdollModifier(float temps){

        Anim.enabled = false;
        Cc.enabled = false;
        MovPlayerScript.enabled = false;
        yield return new WaitForSeconds(temps);
        
        Anim.enabled = true;
        Cc.enabled = true;
        MovPlayerScript.enabled = true;

    }
}
Les différents problèmes que je rencontre donc sont les suivants :
- Si le personnage en mode ragdoll sort de l'écran il n'est plus affiché au moment où les composants sont réactivés, il semblerait que seul l'affichage du personnage soit bug car je peux bouger(je ne le vois que parce que la caméra suit les mouvements de mon characterController dont la physique n'est pas bug mais mon personnage n'est pas du tout affiché ombres incluses), quand ça arrive, si je retourne dans l'onglet 'scene' et que je fais un focus sur mon personnage il réaparaît dans l'onglet 'game' au moment où je retourne sur celui-ci.
-J'ai essayé en changeant le parent de ma caméra avec 'SetParent()' de faire suivre le ragdoll par la caméra mais ca n'a jamais fonctionné.

Si ce n'est pas trop vous demander je souhaiterai que vous m'apportiez votre précieuse aide sur ces problèmes que je n'ai pas su résoudre :amen:

Re: Bug activation/desactivation Ragdoll

Publié : 18 Déc 2021 12:38
par Max
Bonjour,

comment est configurée la partie Ragdoll ? Je ne vois rien qui y fasse mention.
Dans ton script, on voit bien les désactivation/activation des composants, mais rien lié non plus au passage en mode "Ragdoll".

Re: Bug activation/desactivation Ragdoll

Publié : 18 Déc 2021 15:48
par MekaZenis
Max a écrit :
18 Déc 2021 12:38
Bonjour,

comment est configurée la partie Ragdoll ? Je ne vois rien qui y fasse mention.
Dans ton script, on voit bien les désactivation/activation des composants, mais rien lié non plus au passage en mode "Ragdoll".
Je ne vois pas ce que tu veux dire par 'activer' le mode ragdoll et j'ai seulement créé un gameObject Ragdoll sur lequel j'ai assigné les parties du corps de mon personnage puis j'ai modifié la taille des colliders pour qu'ils correspondent aux proportions de mon personnage, rien de plus.

Image

Re: Bug activation/desactivation Ragdoll

Publié : 18 Déc 2021 16:55
par Max
C'est important de voir comment tu as architecturé ton truc.
Et en fait du coup, cela veut dire ton objet Ragdoll s'éloigne du parent quand il tombe.
Vu que ton Ragdoll est un GameObject différent du Player, je le sortirais de la hiérarchy du Player, et l'activerait au moment opportun, puis en suite je recalerais la position du Player à sa réactivation au moment où le Player reprend son rôle.
En générale, on essais de générer le ragdoll sur rig du Player lui même, cela évite ce genre de soucis.
Un lien éventuellement pour t'éclairer sur ce point: https://www.youtube.com/watch?v=krV3JSUn4u4

Re: Bug activation/desactivation Ragdoll

Publié : 18 Déc 2021 19:16
par MekaZenis
J'ai beau avoir crée directement un GameObject ragdoll, après l'avoir activé il s'est positionné automatiquement sur mon rig(je ne vois même pas comment en faire un GameObject à part).
Que voulais tu dire par 'passage en mode ragdoll' je n'arrive pas à avoir d'information à ce sujet.
Il me semblait qu'il suffisait de désactiver les composants manipulant le mesh pour activer le mode ragdoll.

Re: Bug activation/desactivation Ragdoll

Publié : 19 Déc 2021 11:54
par Max
J'ai du mal à voir comment tu as générer ton Ragdoll. C'est ce qui me turlupine ;)
As-tu suivit le tuto du Learn ? -> https://learn.unity.com/tutorial/creating-ragdolls-2019#

Re: Bug activation/desactivation Ragdoll

Publié : 28 Déc 2021 14:52
par MekaZenis
Excuse moi pour le retard de ma réponse, je profitais de mes vacances

Il me semble avoir configuré de la même manière que ce tuto bien que j'ai suivi celui de 'TUTO UNITY FR' pour créer mon ragdoll mais j'ai remarqué que je n'avais pas besoin de changer le iskinematic pour que mon personnage passe en mode ragdoll et inversement(peut être parce ce que j'utilise un character controller) à la place en plus de désactiver/activer mes component j'utilise la position du ragdoll pour le faire suivre par la caméra ainsi il ne sort pas du champ de vision de celle ci et ne devient pas invisible.
Bien que je sois intrigué de savoir pourquoi quand le ragdoll sort de l'écran il ne réapparait pas je préfère ne pas prendre des heures pour ce simple problème et me contenterai de ce que j'ai dis plus haut qui marche parfaitement.
Merci à toi pour toutes tes réponses. :merci: