[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
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
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:23

Alors, là. Je sais lire les scripts et les corriger. En ce qui concerne la partie Comment faire?, c'est plus difficile à distance de répondre sans tester.
Est-ce que le saut automatique est une bonne solution? Faut-il créer un comportement particulier pour les cubes déplaçables? Ce sont des questions d'agencement auxquelles il te faut réfléchir.
Pour le coup, je ne sais pas ce qui est le mieux, je ne fais pas de jeu avec des personnages.
"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:25

Ca marche, je vais tester en parralèle avec du Raycast pour voir si cela peut corriger mes soucis et optimiser mon code.

En tout cas merci beaucoup pour ton aide précieuse !!

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
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:29

Avec plaisir. ;-)

Quel que soit le résultat du raycast, si tu pouvais nous faire un petit retour ici, ça pourrait profiter aux autres membres. Et aussi mettre le post en [RESOLU] une fois l'affaire pliée, stp.
Merci.
"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:29

boubouk50 a écrit :Avec plaisir. ;-)

Quel que soit le résultat du raycast, si tu pouvais nous faire un petit retour ici, ça pourrait profiter aux autres membres. Et aussi mettre le post en [RESOLU] une fois l'affaire pliée, stp.
Merci.
Aucun problème au contraire

Krafter
Messages : 65
Inscription : 11 Fév 2017 17:03

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

Message par Krafter » 07 Mars 2017 11:37

Bonjour,
Alors je débute aussi mais si je peux tenter d'aider on sait jamais ^^ donc ce que je vais dire est à prendre avec des pincettes/confirmer.

De ce que j'ai vu Gurvan, il vaut mieux utiliser des triggers que des raycasts quand on peut car c'est moins coûteux en ressources il me semble, que d'avoir un raycast qui calcule une position à chaque frame tout le temps. Avec des triggers on a des calculs à chaque frame mais seulement une fois dans le trigger.
Sinon, plutôt que OnTriggerStay n'y aurait-il pas moyen de trouver une solution style (je simplifie pour aller vite) :
OnTriggerEnter :
{
InteractionObject();
}

OnTriggerExit:
{

}

void IntercationObject()
{
TonCode
}
Moi je pense je ferai comme ça? Ça te permettrait de l'avoir toujours interactif à chaque frame du moment que t'es dans le trigger non? Ensuite pour le lâcher je ne saurais pas dire comment faire, si il vaut mieux mettre un "while" dans la fonction "InteractionObject" ou si y'a une commande à mettre dans OnTriggerExit qui permet d'annuler la fonction? Style "!InteractionObject()" ? ^^"


Sinon pour savoir ça sert à quoi de le "déparentage"? A ce que ton cube suive les mouvements de ton joueur c'est ça? Mais il était dans un parent à la base ton cube?

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:44

Krafter a écrit :Bonjour,
Alors je débute aussi mais si je peux tenter d'aider on sait jamais ^^ donc ce que je vais dire est à prendre avec des pincettes/confirmer.

De ce que j'ai vu Gurvan, il vaut mieux utiliser des triggers que des raycasts quand on peut car c'est moins coûteux en ressources il me semble, que d'avoir un raycast qui calcule une position à chaque frame tout le temps. Avec des triggers on a des calculs à chaque frame mais seulement une fois dans le trigger.
Sinon, plutôt que OnTriggerStay n'y aurait-il pas moyen de trouver une solution style (je simplifie pour aller vite) :
OnTriggerEnter :
{
InteractionObject();
}

OnTriggerExit:
{

}

void IntercationObject()
{
TonCode
}
Moi je pense je ferai comme ça? Ça te permettrait de l'avoir toujours interactif à chaque frame du moment que t'es dans le trigger non? Ensuite pour le lâcher je ne saurais pas dire comment faire, si il vaut mieux mettre un "while" dans la fonction "InteractionObject" ou si y'a une commande à mettre dans OnTriggerExit qui permet d'annuler la fonction? Style "!InteractionObject()" ? ^^"


Sinon pour savoir ça sert à quoi de le "déparentage"? A ce que ton cube suive les mouvements de ton joueur c'est ça? Mais il était dans un parent à la base ton cube?
Honnêtement je ne sais pas si le raycast est plus gourmand en ressources, je vais comparer toutes les solutions de toute façon.
Je vais essayer ta méthode qui est plus propre que la mienne.
L'histoire du parentage c'est pour permettre à mon perso de tirer ou pousser l'objet uniquement quand il est proche de l'objet et qu'il appuie sur une touche. Le parentage permet effectivement de bouger l'objet en même temps que mon perso comme je lui enlève ses constraints avant de le bouger. J'ai trouvé cette méthode plus simple qu'une application de forces.

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

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

Message par evereal » 08 Mars 2017 15:47

Hello,

Pour ma part je partirai sur une autre hierarchie.
Le but sera de passer les controles sur un script associé a ton "Player" et se servir des trigger enter et exit pour alimenter une reference sur la caisse que tu souhaite manipuler.
Pour ta caisse :

Code : Tout sélectionner

public class PushandPull : MonoBehaviour 
{           
   void OnTriggerEnter (Collider other)
   {
        if (other.gameObject.tag == "Player")
        {
           other.gameObject.getComponent<Player>().caisse = this;
        }
   }

   void OnTriggerExit (Collider other)
   {
        if (other.gameObject.tag == "Player")
        {
           other.gameObject.getComponent<Player>().caisse = null;
        }
   }
}

Pour ton GameObject "Player", rajouter un script pour les déplacement du genre :

Code : Tout sélectionner

public class Player : Monobehaviour {
    public PushandPull caisse;

    if (Input.GetButtonDown("Fire1") && caisse != null)
    {
        Rigidbody rb = caisse.GetComponent<Rigidbody>();
        //on change l'objet de parent
        caisse .transform.SetParent(this.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;
    }
}
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

Répondre

Revenir vers « (C#) CSharp »