[DB-AL][RESOLU] vitesse de diagonale différente sur le joystick

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 : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL][RESOLU] vitesse de diagonale différente sur le joystick

Message par boubouk50 » 17 Nov 2020 19:40

Le problème reste le même. Cela ne fonctionne correctement uniquement lorsque x et y sont dans la diagonale (i.e. x = y = √2/2).
Le cas extrême sera lorsque le déplacement ne sera que sur un seul axe. Le vecteur de déplacement vaudra 1 lorsque la valeur au Joystick atteindra √2/2 (soit 0.707...), car √2/2 * √2 = 1.
La valeur maximale sera donc atteinte avant que le joystick soit en bout de course, soit à √2/2 (donc 0.707...).

En fait, ce que tu fais, c'est ne pas définir un carré en fonction du cercle du joystick, mais définir un carré dans la course du joystick.

Sur l'image, la course du joystick est le cercle blanc, et la zone qui vaut 1 est le carré pointillé rouge.
https://ibb.co/0qrZdzB
Image
"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

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

Re: [DB-AL][RESOLU] vitesse de diagonale différente sur le joystick

Message par Aelhan » 17 Nov 2020 20:06

En effet je ne l'avais pas vu comme ça, comme je ne sais pas trop comment fonctionne le joystick niveau valeurs, ça demande réflexion pour adapter les équations que tu as donné plus haut en quelque chose d'intelligible et codable...
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

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

Re: [DB-AL][RESOLU] vitesse de diagonale différente sur le joystick

Message par boubouk50 » 17 Nov 2020 20:12

L'équation est donnée, il suffit de remplacer u et v par les valeurs de joystick, donc Input.GetAxis("Horizontal") et Input.GetAxis("Vertical").
"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

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

Re: [DB-AL][RESOLU] vitesse de diagonale différente sur le joystick

Message par Aelhan » 17 Nov 2020 20:51

En effet, on y voit plus clair sur l'ordi ^^
Après des essais sur excel (mais bizarrement cet imbécile ne comprend pas quand le joy est en diagonale, il me renvoie une erreur de racine de nombre négatif alors que pas à pas et à la main ça fonctionne très bien), c'est en effet √2 fois mieux que ma solution, ce qui est loin d'être négligeable !
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: [DB-AL][RESOLU] vitesse de diagonale différente sur le joystick

Message par jmhoubre » 18 Nov 2020 17:33

Après avoir cherché pas mal de temps, je vous livre quelques éléments supplémentaires :
  • Je me suis posé la question de l'étalonnage de la manette. Ma manette est une compatible Xbox, et j'ai pu trouver la procédure sur internet. Je la pose ici pour mémoire (pour Windows 10) :
    1. Dans la zone de recherche de la barre de tâches chercher "Panneau de configuration"
    2. Afficher les périphériques et imprimantes
    3. Clic-droit sur votre manette et "Paramètres des contrôleurs de jeu"
    4. Propriétés affiche une fenêtre avec 2 onglets. Vous pouvez tester tous les boutons et savoir ainsi le numéro du bouton dans l'OS correspondant au bouton de la manette, c'est en principe le numéro utilisé par Unity. Vous pouvez étalonner votre manette avec Paramètres.
  • En affichant les valeurs brutes, on constate que ma manette renvoie un entier 16 bits. Je ne sais pas si c'est Windows ou Unity qui met cette valeur dans [-1, 1], mais je comprends mieux l'importance de l'étalonnage. Si votre 0 est à 20000 ou 45000, et pas à 32768, votre intervalle de valeurs sera toujours dans [-1,1] mais les valeurs seront décalées. Je ne sais pas non plus si cette plage d'entiers de 16 bits est un standard ou diffère selon les manettes.
  • on remarque, en testant le joypad, que les diagonales ne renvoient pas 1 ou -1. Je pense que c'est le comportement normal. Ce que je ne m'explique pas trop, c'est que les valeurs renvoyées sont parfois assez éloignées de (±0.7, ±0.7). La qualité de la manette est probablement responsable de ceci. J'essaierai de tester d'autres manettes.
  • plusieurs fois j'ai trouvé une référence à la fonction Input.GetJoystickNames (), qui renvoie un tableau de strings avec le nom des manettes connectées. Chez moi, même dans la fonction Update (), cette fonction renvoie toujours le nom d'une manette branchée puis déconnectée. Bof... Les jeux détectent parfois si une manette est débranchée, donc cela doit être possible. Mais comment ?

Répondre

Revenir vers « (C#) CSharp »