Deplacement et rotation d'un personnage en forme de sphère.

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Deplacement et rotation d'un personnage en forme de sphère.

Message par Xann_71 » 18 Août 2016 22:31

Bonsoir. Je me lance dans un mini jeu semblable aux auto tamponneuses mais avec des sphères en guise de voiture. Je ne sais pas si je vais faire une sphère toute seule (en imaginant le personnage à l'intérieur) ou un personnage qui court au dessus de la sphère pour la faire tourner et ainsi avancer. Quoi qu'il en soit, l'idée est que lorsqu'elle avance, la sphère doit tourner sur elle même (comme toute balle ou ballon tourne lorsqu'on le pousse).
J'ai déjà pensé à 2 solutions pour obtenir le résultat mais je ne sais pas laquelle est la plus optimal ou si il existe d'autres solutions.

_Soit j'utilise un empty en parent sur lequel sera associé mon script de déplacement. Cet empty ne tournera donc que sur l'axe Y pour effectuer les rotations vers la gauche et la droite mais sera bloqué sur les 2 autres axes. Je met ensuite en enfant une sphère possédant une animation de rotation qui jouera son animation lorsque le joueur se déplace.

_La 2eme méthode m'a traversé l'esprit mais je ne sais pas si elle est réalisable. Je pensais utiliser directement le script de déplacement sur la sphère en jouant sur les coordonnées local et global pour obtenir un personnage qui avance bien en suivant le sol mais qui tournerait sur lui même.

J'aurais aimé avoir vos avis pour savoir si mes réflexions sont bonnes ou si je suis complètement à côté de la plaque. Dans ce deuxième cas, si vous avez une idée sur laquelle m'orienter pour parvenir à mes fins, je suis preneur.

Merci d'avance.

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

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par boubouk50 » 19 Août 2016 09:34

Je ne vois pas comment tu souhaites tourner ta balle:
- Elle tourne toujours sur le même axe local? Admettons X l'axe de rotation, Y l'axe Up et Z l'axe de direction. Localement ce seront toujours ces axes là pour la direction. Quand tu tournes à l'arrêt, la balle tourne sur l'axe world Up. Le personnage est donc lié à cette balle sur cet axe.
- Elle ne tourne pas sur elle-même? Quand tu tournes, la balle ne tourne jamais sur l'axe world Up mais le personnage dessus oui.

Suis-je clair?
"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

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par Xann_71 » 19 Août 2016 11:49

Salut, merci d'avoir lu et répondu à mon sujet.
Oui je crois avoir compris. En gros ma méthode 2 n'est pas réalisable.
Du coup en me penchant mieux sur la méthode 1, si j'utilise mon empty en parent pour effectuer les déplacements et les rotations sur la gauche et la droite., je peux lui mettre un objet sphère en enfant qui elle va rouler sur elle même lorsque le joueur avance avec une animation et un objet "bonhomme" en enfant (de l'empty toujours et non enfant de la sphère) qui va également joueur une animation de marche pour simuler qu'il fait tourner la boule en marchant dessus.
Je tiens à séparer le bonhomme et la boule (en 2 gameobjects différents) car je pense par la suite réaliser une action ou le bonhomme peut tomber de la boule et ainsi en être séparé quelques secondes, les autres joueurs pourront a ce moment taper dans la boule et dans le bonhomme pour les éloigner et empêcher le joueur de revenir dans la partie.

Est ce que cette méthode semble correcte où dois je me lancer sur une autre approche?

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

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par boubouk50 » 19 Août 2016 11:58

Ton approche dépendra de ce que tu veux faire exactement.
Si tu utilises la physique, il vaut mieux utiliser la boule comme Controller et la faire avancer avec des AddForce ().
Sinon, tu peux soit faire ta méthode, soit utiliser la boule comme Controller.
Dans les deux cas, il vaut mieux que le personnage dessus soit séparé.
Si tu utilises un Empty (donc translation uniquement) tu peux le parenter pour qu'il soit toujours à la même position par rapport à l'empty. Sinon, il faut qu'il récupère la position de la boule pour le caler comme il faut (le parentage induira la rotation, ce que tu ne veux pas).
Il te faut définir clairement ton gamePlay. Ici je n'ai pas assez d'info pour te conseiller le bon chemin. Ta méthode reste possible.
"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

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par Xann_71 » 19 Août 2016 12:18

Mais je ne peux pas utiliser un Addforce() sur un empty possédant une boxcollider?
Je vais essayer d'avancer sur ce projet et j'essaierais de repasser pour donner l'avancée.
Merci encore pour ton aide.

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

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par boubouk50 » 19 Août 2016 13:21

Xann_71 a écrit :Mais je ne peux pas utiliser un Addforce() sur un empty possédant une boxcollider?
Et pourquoi cela? Il te faudra un SphereCollider si tu veux simuler un ballon...
"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

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par Xann_71 » 19 Août 2016 22:20

Oui je voulais dire spherecollider pardon.

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par Iwa » 22 Août 2016 10:35

Si tu as eu toutes tes réponses n'hésite pas à passer le sujet en Résolu en éditant ton premier post ;). Merci.
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par Xann_71 » 26 Août 2016 21:50

Bonsoir, toujours sur les déplacements de mon ballon. J'ai essayé de lui mettre un addForce() pour me rendre compte que cette fonction agit sur les coordonnées globales. Du coup si je fais par la suite un transform.Rotate() ou un addTorque(). Mon ballon tourne sur lui même mais ne change pas de direction.

La solution serait donc apparemment d'utiliser addRelativeForce().

Je me demandais quand même dans quels cas est donc utilisé l'addForce()? Peut il être utilisé sur des objets qui change de direction (comme pour un personnage) ou permet il uniquement des déplacements tels que pour un projectile qui ira toujours tout droit?

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

Re: Deplacement et rotation d'un personnage en forme de sphère.

Message par boubouk50 » 27 Août 2016 10:48

AddForce () donne juste une force physique à un instant t. Il est donc utile à n'importe quel moment, pour 'pousser' un rigidbody dans une direction. Cette direction est en coordonnée World. Rien ne t'empêche de transformer une coordonnée locale en world...
Effectivement, si tu l'utilises dans un Update () avec toujours le même vecteur direction, alors le rigidBody ira tout droit. Mais tu n'es ni obligé de l'utiliser dans un Update (il peut être sur un événement ou un Input) ni toujours avec le même vecteur.
"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

Répondre

Revenir vers « Unity le logiciel »