[DB-AL] pousser et tirer un objet

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
gurvan
Messages : 14
Inscription : 28 Fév 2017 09:34

[DB-AL] pousser et tirer un objet

Message par gurvan » 07 Mars 2017 09:57

Bonjour à tous,
J'ai fait un script qui normalement devrais premettre à mon Player de pouvoir pousser ou tirer l'objet suivant 2 conditions, la première c'est mon gameobject Player qui entre dans le trigger et deuxième le joueur appuie sur la touche "fire1".
Mais cela ne fonctionne pas, en fait si ca fonctionne mais si j'enlève la cndition d'appuie sur "Fire1" mais dans ce cas impossible de sortir du trigger...

Voici le code :

Code : Tout sélectionner

public class PushandPull : MonoBehaviour {

    private Rigidbody rb;

    void OnTriggerEnter(Collider other)
    {        
        if (other.gameObject.tag == "Player")
        {
            if (Input.GetButtonDown("Fire1"))
            {
                //on change l'objet de parent
                this.transform.SetParent(other.transform);
                //on ajoute le is kinetic à l'objet  
                rb = GetComponent<Rigidbody>();
                rb.isKinematic = true;
                //on débloque le mouvement sur X
                rb.constraints = RigidbodyConstraints.FreezePositionY | RigidbodyConstraints.FreezePositionZ | RigidbodyConstraints.FreezeRotation;
            }
            if (Input.GetButtonUp("Fire1"))
            {
                //on change l'objet de parent
                other.transform.parent = null;
                //on ajoute le is kinetic à l'objet
                rb = GetComponent<Rigidbody>();
                rb.isKinematic = false;
                //on bloque le mouvement sur X
                rb.constraints = RigidbodyConstraints.FreezeAll;
            }
        }        
    }  
            
}
et voici ma hierarchie avec l'inspector de l'objet :
Image

Est-ce que l'un d'entre vous à une idée d'où vient le problème?

(PS : je sais que le script est pas super optimisé mais dans un premier temps j'aimerais au moins qu'il fonctionne...)

Merci !!

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] pousser et tirer un objet

Message par boubouk50 » 07 Mars 2017 10:37

Salut,

Je pense que cela provient de ton déparentage: Tu enlèves le parent du personnage et pas du cube, donc ton cube est fixe et lié au personnage, ce qui l'empêcherait de bouger.
Dans le GetButtonUp:

Code : Tout sélectionner

 //on enlève le parent
this.transform.parent = null;
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

gurvan
Messages : 14
Inscription : 28 Fév 2017 09:34

Re: [DB-AL] pousser et tirer un objet

Message par gurvan » 07 Mars 2017 10:41

boubouk50 a écrit :Salut,

Je pense que cela provient de ton déparentage: Tu enlèves le parent du personnage et pas du cube, donc ton cube est fixe et lié au personnage, ce qui l'empêcherait de bouger.
Dans le GetButtonUp:

Code : Tout sélectionner

 //on enlève le parent
this.transform.parent = null;
Le script n'est pas sur le personnage mais sur le cube lui même donc quand j'enlève mon doigt de la touche, il devrait prendre en compte l'action et donc passer le cube "sans parent" nan?

gurvan
Messages : 14
Inscription : 28 Fév 2017 09:34

Re: [DB-AL] pousser et tirer un objet

Message par gurvan » 07 Mars 2017 10:47

Je comprends ce que tu veux dire, j'ai modifié le code en conséquence :

Code : Tout sélectionner

if (Input.GetButtonUp("Fire1"))
            {
                //on change l'objet de parent
                this.transform.SetParent(null);
Mais ca ne change pas mon principal problème qu'il ne détecte pas quand j'appuie sur ma touche Fire1...

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] pousser et tirer un objet

Message par boubouk50 » 07 Mars 2017 10:50

Est-ce que Fire1 est mappé? > Input Settings
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

gurvan
Messages : 14
Inscription : 28 Fév 2017 09:34

Re: [DB-AL] pousser et tirer un objet

Message par gurvan » 07 Mars 2017 10:52

boubouk50 a écrit :Est-ce que Fire1 est mappé? > Input Settings
j'ai ajouté du debug.log donc le script voit bien mon personnage entrer dans le trigger mais la touche ne fonctionne pas.
Voici le map de ma touche :

Image

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] pousser et tirer un objet

Message par boubouk50 » 07 Mars 2017 11:02

Rooooh je suis lent à la détente ce matin!

Utilise OnTriggerStay () au lieu de OnTriggerEnter ().
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

gurvan
Messages : 14
Inscription : 28 Fév 2017 09:34

Re: [DB-AL] pousser et tirer un objet

Message par gurvan » 07 Mars 2017 11:04

J'ai change le OnTrigger effectivement je l'avais vu sur la doc mais j'ai pas calculé... désolé fin de journée pour moi donc les neuronnes un peu fatigués :D et ca fonctionne !!!!! mais c'est encore assez bugué je trouve...
un coup sur deux il détecte pas ma touche enfoncée ou pas, un coup sur deux je peux aller à gauche avec ma caisse mais plus à droit, obligé de lacher et reprendre l'objet...
Je me demande du coup si ma manière de faire a été la bonne (utilisation des parents et du kinetic)...

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] pousser et tirer un objet

Message par boubouk50 » 07 Mars 2017 11:11

OnTriggerStay is called almost all the frames for every Collider other that is touching the trigger.Comme il est lié à la physique, il n'est pas appelé à toutes les frames, cela peut poser problème.
Par contre, normalement, une fois "pris", il ne devrait pas être relâché sans relâcher la touche...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

gurvan
Messages : 14
Inscription : 28 Fév 2017 09:34

Re: [DB-AL] pousser et tirer un objet

Message par gurvan » 07 Mars 2017 11:15

boubouk50 a écrit :OnTriggerStay is called almost all the frames for every Collider other that is touching the trigger.Comme il est lié à la physique, il n'est pas appelé à toutes les frames, cela peut poser problème.
Par contre, normalement, une fois "pris", il ne devrait pas être relâché sans relâcher la touche...
C'est bien ce qu'il me semblait...
Et si j'utilisais plutot du raycast? Quand le raycast du cube détectes que le player est suffisament près, le cube "autorise" le player à le bouger. Ca pourrait rêgler mon soucis de trigger sachant que du coup ce trigger m'occasionne un autre bug que je viens de voir... Pour le saut j'utilise les layer, mon cube est sur le layer permettant à mon perso de sauter, mais comme j'utilise le trigger du cube pour le bouger, bah mon perso fait un saut dès qu'il approche du cube même de côté...

Répondre

Revenir vers « (C#) CSharp »