Gravité simulé dans une boite

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
Yugo
Messages : 24
Inscription : 12 Nov 2018 15:22

Gravité simulé dans une boite

Message par Yugo » 22 Nov 2018 16:58

Bonjour.
J'ai une boite composée de 6 murs avec trigger et collider parent d'un objet vide possedant un rigidbody et un FPSPlayer rigidbody à l’intérieur.
On est dans l'espace donc pas de gravité.
Mon player a un script qui dit que si je suis dans le trigger d'un mur celui ci l'attire (gravité artificiel). Ca marche bien.

Lorsque la boite tourne sur elle suivant un axe mon player a un comportement bizarre...Ca ressemble à une force centrifuge.
Je voudrais que mon player puisse se balader tranquillement sur les murs de cette boite sans être affecté par ces forces du au rotation de l’ensemble.
le but étant de se mouvoir dans un vaisseaux spatial alors que celui ci bouge et tourne dans tous les sens.
Avez vous des infos sur ces forces appliquées en fonction de la rotation?
peut on les supprimer ?
Ou avez vous d'autre astuce pour y arriver?

Avatar de l’utilisateur
Sebela
Messages : 141
Inscription : 25 Juin 2014 21:39

Re: Gravité simulé dans une boite

Message par Sebela » 22 Nov 2018 17:43

Hello,

Intéressant comme idée !
Mais du coup, il faudrait un peu plus de détails. Les triggers affectés aux murs sont plus grands que les murs et représentent une "zone" dans laquelle le joueur est attiré, c'est ça ?
Comment fais-tu tourner ton cube ? Avec un transform.Rotate ou en utilisant le moteur physique ? (ex : RigidBody.MoveRotation)
Quand tu tournes ton cube, tu veux que le joueur reste collé à une paroi ? (ce qui pour moi serait le comportement logique vu qu'il est attiré par un mur, sans force de gravité)
J'essaye de cerner ton problème ^^

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Gravité simulé dans une boite

Message par djulio74 » 22 Nov 2018 18:06

Comment gère tu la gravité en fonction du mur?
ton perso, doit se voir appliquer une force dans la direction inverse à la normal du mur en question.
Soit avec un AddForce, soit en changeant directement la gravité d'unity. Dans les deux cas, le vecteur direction de la force ou de la gravité doit être en permanence actualiser pour bien correspondre a la nouvelle normal du mur suite à rotation par exemple.

Ensuite un soucis pourrait être le glissement de ton player sur le sol. Si l'instant ( le centre) de rotation de ton vaisseau se situe ailleurs qu'au contact player/mur, cela reviens, vu par le player a une rotation ET un déplacement du mur.
En gros c'est comme si le mur en question se déplaçait sous le player s'il n'y a pas d'adhérence entre les deux, en même temps qu'une rotation. Car même si tu n'as pas de gravité réelle, ton rigidBody Player possède tout de même une inertie relative a sa masse.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: Gravité simulé dans une boite

Message par DevAmat » 22 Nov 2018 18:28

Il y a une piste qui avait été donnée je crois ici. La physique de ton player pourrait être géré dans une "copie" du vaisseau ailleurs dans la scène. Et dans ton "vrai" vaisseau en rotation le transform de ton player suivrait le transform du player de la copie du vaisseau.
Je ne sais pas si je suis clair...

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Gravité simulé dans une boite

Message par djulio74 » 22 Nov 2018 19:08

Moi j'ai compris je crois ^^ :hehe:
Vais essayer d'approfondir ton idée :
il faudrait ton vaisseau (vrai vaisseau qui bouge tourne, rigidbody..etc) et un GameObjectpour ton Perso (vrai perso), juste pour l'affichage (sans rigidbody ni collider), enfant du vaisseau.

Il faudrait faire un double du vaisseau ( disons juste les collider ) et de ton perso ( idem collider uniquement et rigidbody)
le double de ce vaisseau donc sans rigidbody et immobile ( avec collider), et ton perso enfant de ce vaisseau (rigidbody, collider). (faux vaisseau, faux perso)
Le tout juste pour gérer les déplacement collision du joueur dans le vaisseau Etc... Donc tu te déplace dans ce faux vaisseau immobile, fait varier les gravité etc... tout devrait bien fonctionner
Tu récupère les variable local du faux perso( localPosition, localRotation) et tu les assigne au vrai perso en local également.

vraiPerso.localPosition = fauxPerso.localPosition par exemple.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Yugo
Messages : 24
Inscription : 12 Nov 2018 15:22

Re: Gravité simulé dans une boite

Message par Yugo » 22 Nov 2018 23:12

oui!
Ca m'a l'aire d'une très bonne idée! Merci!
un clone du vaisseau qui ne subirait que les forces voulues..
Je vais plancher là dessus.

Pour la gravité des murs je place un trigger partant du milieu du mur et dépassant celui-ci pour définir un champ de gravité.
Je récupère la normal up du mur et la défini comme vecteur inverse de la gravité. J'applique un AddForce.

Ma force centrifuge n'en ai pas une en effet car il y a des mouvements inverses de temps en temps... ca doit venir des frottements avec le sol certainement.

Merci pour toutes vos réponses

Répondre

Revenir vers « Unity le logiciel »