IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

problème rotation d'un vaisseau par commandes envoyées par un serveur


Sujet :

Unity

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 8
    Points
    8
    Par défaut problème rotation d'un vaisseau par commandes envoyées par un serveur
    Bonjour à tous,

    Je viens vers vous car je bloque depuis deux jours sur un problème qui peut paraître banal mais néanmoins assez embêtant. Voila, j'ai commencé la conception d'un space shooter et voici le code utilisé pour le mouvement et la rotation du vaisseau :

    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");

    Vector3 movement = new Vector3(moveHorizontal, moveVertical, 1.0f);
    _rigidbody.velocity = movement * _speed;

    //rotation du vaisseau
    _angleHorizontal = _speed * moveHorizontal;
    _angleVertical = _speed * -moveVertical;
    _rigidbody.rotation = Quaternion.Euler( _angleVertical, _angleHorizontal, _rigidbody.velocity.x * - tilt);


    Ce code marche très bien et le vaisseau fait un mouvement harmonieux et agréable. Seulement voilà, je chercher à reproduire ce mouvement sauf que je n'utilise pas de clavier ni de souris, les commandes sont envoyées par une autre classe qui reçoit des chiffres parle réseau (mise en place d'un socket) et renvoie à la classe qui dirige le vaisseau des sendMessage en appelant les fonctions ToTheRight, ToTheLeft etc... ce qui me pose problème c'est l'intérieur de ces fonctions, par exemple pour ToTheRight j'ai fais :
    Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), 0.0f, 1.0f);
    _rigidbody.velocity = (movement * _speed);
    _rigidbody.MoveRotation(Quaternion.Euler(0.1f,0.1f,_rigidbody.velocity.x * -tilt));

    Mais la rotation se fait d'un coup, on obtient des rotations saccadées c'est très moche.

    Croyez-vous qu'il existe un moyen de rendre la rotation plus fluide? Je ne pense pas qu'il soit possible dans mon cas d'utiliser les Input, qu'en pensez-vous?

    Toute aide est la bienvenue, merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Programmeur Audio
    Inscrit en
    Décembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur Audio
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 127
    Points : 221
    Points
    221
    Par défaut
    Salut Domi's

    Tu pourrais faire SmoothDampAnglede la rotation courante vers la rotation souhaité afin que ce soit plus doux.

    Par contre je ne comprend pas pourquoi tu as Input.GetAxis("Horizontal") dans ta fonction qui sert a répliquer la rotation du client 1 chez le client 2.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour et merci pour ta réponse, j'ai essayer cette fonction et malheureusement la rotation est toujours aussi brutale, elle se fait en une seule frame. Tu as raison le Input.GetAxis ne sert à rien vu qu'on ne se sert pas des input clavier ni souris,

  4. #4
    Membre actif
    Profil pro
    Programmeur Audio
    Inscrit en
    Décembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur Audio
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 127
    Points : 221
    Points
    221
    Par défaut
    Pourrais tu donner un extrait du script avec les méthodes en entière et les appels ?

    L'idée serait de faire:
    Le client A envoi au serveur la rotation souhaité
    Le serveur transmet aux clients la rotation souhaité du client A
    Le client n enregistre la rotation souhaité et dans sa boucle d'update change la rotation pour passer à la rotation courante à la rotation souhaité en appliquant le smooth.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Pas grand chose à rajouter apres ce qu'à dit super_neon, mais question bête domi's : as tu bien mis une bonne valeur temporelle en utilisant SmoothDampAngle ? (genre pas une valeur qui fait que la rotation se fait hyper vite) Car normalement ca devrait te faire faire une rotation fluide entre la rotation actuel du vaisseau vers sa nouvelle rotation que le serveur a envoyé (à utiliser dans le Update)

    Sinon il y a aussi Quaternion.Lerp pour faire des rotations fluide.

    Question au passage pour les pros : quelle est la différences entre ces deux fonctions exactement ? et la quelle est celle à favoriser pour ce cas là ?

Discussions similaires

  1. Comment afficher la commande envoyée par un tSystem
    Par marc85 dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 25/02/2015, 11h00
  2. [Toutes versions] Créer un formulaire (bon de commande) PDF par commande d'une liste
    Par Carlycox dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/05/2013, 15h11
  3. Réponses: 9
    Dernier message: 19/10/2012, 09h02
  4. Réponses: 0
    Dernier message: 13/08/2010, 14h30
  5. Problème d'encodage d'une commande lancée par java
    Par Pointu dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 29/04/2006, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo