FPS simulation gravité dans un vaisseau en mouvement

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Spiritkill
Messages : 10
Inscription : 16 Mai 2021 05:06

FPS simulation gravité dans un vaisseau en mouvement

Message par Spiritkill » 13 Août 2021 02:05

Bonsoir,
Cela fait maintenant quelques soirées que je passe à regarder des vidéos et chercher des scripts qui me permettent de faire ce que je veux mais j'ai toujours des problèmes avec la gestion de la physique dans Unity. Certaines choses m'échappent et je ne vois pas comment faire.

Le but de mon jeu est un FPS avec un joueur qui se déplace dans un monde 3D.
Mon joueur est un CharacterController avec un script FPS de déplacement trouvé ici (https://sharpcoderblog.com/blog/unity-3d-fps-controller). pas de rigidbody.

Mon joueur va utiliser des plateformes verticales et horizontales, en le mettant enfant des plateformes, le joueur suit bien le mouvement même si je me déplace ou saute (c'est parfait).
Mes plateformes sont des cubes avec 1 collider pour tenir dessus, un collider pour détecter la présence du joueur dessus et au-dessus et un script pour mettre le joueur en enfant. (pas de rigidbody)

Par contre j'ai un autre objet (un vaisseau ou avion) dans lequel mon joueur peux aller à l'intérieur et le piloter.
Le joueur peut donner une vitesse au vaisseau et se déplacer à l'intérieur, or même si mon joueur est enfant du vaisseau, il ne suit pas comme pour les ascenseurs.
Je pense que cela vient du fait que le vaisseau à un rigidbody et qu'il est déplacé avec des AddForce.

J'aimerai que le joueur suive le vaisseau même en rotation (si le vaisseau est à l'envers par rapport au monde, le joueur le sera aussi) afin de simuler un champ de gravité dans le vaisseau.

Je n'arrive pas trouver comment gérer ce problème :
Faut-il que j'enlève le Rigidbody du vaisseau ?
Comment gérer par la suite la collision du vaisseau avec d'autres éléments ?
Je dois gérer avec ma propre gestion de la physique ?

Comme je pense qu'il y a plusieurs solutions, je suis un peu perdu.

Merci

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: FPS simulation gravité dans un vaisseau en mouvement

Message par Max » 14 Août 2021 10:22

Bonjour,
Spiritkill a écrit :
13 Août 2021 02:05
J'aimerai que le joueur suive le vaisseau même en rotation (si le vaisseau est à l'envers par rapport au monde, le joueur le sera aussi) afin de simuler un champ de gravité dans le vaisseau.
ben si tu veux respecter la gravité, si le vaisseau passe à l'envers, ton joueur va tomber pour aller atterrir sur le plafond :mrgreen: (sauf si tu le considères attaché).

Perso, si les phases de déplacement de ton personnage au sein du vaisseau sont importante au niveau de ton gameplay, alors il faut traiter ton vaisseau sans avoir à lui gérer la physique. Cela te simplifiera beaucoup la vie (et c'est un euphémisme). Quand au déplacement de celui-ci, tu passes par une gestion des transform, quitte à t'aider d'outil comme DOTween par exemple.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Spiritkill
Messages : 10
Inscription : 16 Mai 2021 05:06

Re: FPS simulation gravité dans un vaisseau en mouvement

Message par Spiritkill » 15 Août 2021 11:36

Hello,
Je te remercie pour ta réponse.

En effet mon joueur sera attaché au vaisseau et restera donc sur le sol du vaisseau même si celui-ci est à l'envers par rapport au monde. Je vois à peu près comment gérer ce point.

Je m'imaginais bien qu'il fallait enlever la gestion de la physique de mon vaisseau, mais je voulais être sûr que c'était le meilleur moyen et le plus simple.
Je ne connais pas DOTween mais je vais regarder ce qu'il en est.

PS : La gestion des plateformes comme indiqué dans mon 1er message ne fonctionne pas très bien : j'ai 2 plateformes horizontale (même code puis que préfab), quand je mets mon player enfant de la 1ère, il suit le mouvement, mais si je fais la même chose sur l'autre il ne suit pas, des fois suit suit aucun des 2 et des fois les 2. Je n'ai pas trouvé ce qu'il se passait, tout semble exactement identique.
Je suis donc partie sur un script de mise à jour de la position et rotation sans parenté de mon joueur via ces 2 tutos très bien fait que j'ai adapté en 1 seul script pour gérer les Rigidbody et les CharacterController :
Unity - Carry RigidBodies NO PARENTING
Unity - Carry RigidBodies BY ROTATION

Merci grandement pour tes conseils.

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: FPS simulation gravité dans un vaisseau en mouvement

Message par Max » 15 Août 2021 12:04

liens intéressants, je vais aller regarder cela :)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Spiritkill
Messages : 10
Inscription : 16 Mai 2021 05:06

Re: FPS simulation gravité dans un vaisseau en mouvement

Message par Spiritkill » 15 Août 2021 15:13

Après quelques tests, le déplacement via la parenté fonctionne bien. Il fallait simplement que je mette le script de déplacement de mes plateformes et vaisseaux dans FixedUpdate et tout fonctionne.

Je vais revoir mon code pour bien séparer Update et FixedUpdate.

Répondre

Revenir vers « Unity le logiciel »