Durant quatre jour, j’ai fait la scène Os. La première journée (7 mai 2020) et la deuxième journée, j’ai ajuster mon code pour la flexion des doigts, afin qu’il y est une limitation correcte dans la flexion des doigts. En premier j’avais mis Quanter GameObject.transform.rotation ou GameObject.transform.eulerAngles, mais je n’avais pas remarqué que pour pouvoir calculer l’angle à partir de la différence entre le GameObject.transform.eulerAngles.z initial et le GameObject.transform.eulerAngles.z final. Donc, j’ai fait dans mes classes Mov_Index, Mov_Majeur, Mov_Annulaire, Mov_Auriculaire et Mov_Pouce, des Quaternion qui prennent la valeur initiale et finale de chacun des os du doigt en question. Puis, j’ai fait une formule de calcules qui me permettent d’obtenir la valeur de l’angle qu’a fait la partie d’un doigt en question. Ensuite, j’ai incrémenté cette valeur à un float et je me suis arranger pour que si l’angle obtenu par le calcul devient supérieure à à la limite fixée, la partie du doigt ne peut plus se fléchir et un message apparait. Pour l’extension des doigts, j’ai mis des variables int pour chaque partie des doigts qui commence à zéro et qui, chaque fois que je clique sur une partie du doigt pour le faire fléchir, augmentent de un. À l’aide de se compteur, j’ai mis une limite pour l’extension, où chaque fois que je clique sur une partie d’un doigt pour amener son extension, cela soustrait de un le compteur de clique attitré à cette partie du doigt et la partie du doigt peut avoir une extension si se compteur n’est pas égal à zéro. Cependant, j’ai remarqué, lorsque je change l’orientation de certaines parties des doigts ou que je fais fléchir ou provoque une extension du poignet, les valeurs des GameObject.transform.eulerAngles initiales et finales changeaient, ce qui faussait mes données, mes calculs et mes angles de limitation. Donc, pour pallier à ça, j’ai fait, à partir de mon code, que l’utilisateur ne pouvais bouger qu’une partie d’un doigts à la fois et que s’il y a flexion ou extension du poignet, il est impossible pour l’utilisateur de provoquer une flexion ou une extension des parties des doigts. D’autre part, j’ai aussi fait une classe qui me permet d’amener la main en os et l’avant-bras en os, que j’ai reçu de mon partenaire, à rotationner vers la droite, vers la gauche ou de revenir à sa position initiale. Pour que la rotation s’effectue correctement, j’ai mis ma main et mon avant-bras dans le même GameObject vide et pour que le poignet fléchisse ou s’extensie, j’ai mis la main et l’avant-bras dans des GameObject vide dont l’origine se trouve au milieu du poignet de la main et l’autre au sommet de l’avant-bras. Puis, j’ai mis cette classe dans trois boutons qui sont <<Gauche>>, <<Droite>> et <<Retour>>. Ensuite, j’ai mis dans le GameObject bouton, qui s’appelle <<Recommencer>>, les scriptes des mouvements des doigts et du poignet. Dans lesquels j’ai mis une fonction RetournePositionInitiale(); qui retourne tous les doigts, le pouce et le poignet à leur position initiale. Après plusieurs essais, où le bouton <<Recommencer>> active toutes les fonctions RetournePositionInitiale();, j’ai remarqué que, lorsque je cliquais sur le bouton <<Recommencer>>, les doigts, le pouce et le poignet retournaient seulement à leur position de rotation initiale, ce qui faisait que, lorsque le main était tourner vers la gauche ou vers la droite, ils faisaient une rotation de 90° sur l’axe des x ou des z. Cela faisait comme si les doigts était cassés. Donc, pour régler se problème, j’ai créé dans le scripte <<Mov_Index>> trois public GameObject qui ont reçus les valeurs du GameObject vide, où la main a été mise, les valeurs du GameObject vide, où l’avant-bras a été mis, et les valeurs du GameObject où la main et l’avant-bras ont été mis. Puis, j’ai mis ces trois GameObject et leur position initiale, qui a été incrémenté dans des Quaternion, dans la fonction RetournePositionInitiale(), ce qui m’a permis, lorsque je clique sur <<Recommencer>> que tout les GameObject reliés à la main et l’avant-bras retournent à leur rotation et à leur position initiale.
La deuxième (9 mai 2020) et troisième journée, j’ai constaté qu’il était difficile de savoir comment interagir avec le programme. Donc, j’ai rajouté un bouton <<Information du fonctionnement>> et je lui ai incrémenté un scripte qui permet d’active des textes qui ne le sont pas. Ces textes apparaissent, à l’aide de <<SetActive();>> près des boutons et décrient leur fonctionnement et leur rôle. Puis, après 4 secondes, ils disparaissent à l’aide de <<IEnumerator>>.
La troisième journée (10 mai 2020), j’ai rajouté à ma scène un << Toggle >> dans lequel j’ai mis le scripte <<Legende>>. Ce scripte permet, si le Toggle est coché, d’activer un Canvas qui contient le nom de tous les os de la main et de l’avant-bras, qui sont associés à des couleurs ou des chiffres. Ensuite, il permet aussi de changer la couleur de chacun des os pour pouvoir les associer à leur nom. Cependant, si la main et l’avant-bras avaient déjà été déplacés, les chiffres associés aux os de la main et le nom des doigts ne se trouvaient plus au bon endroit. Donc, j’ai créé des public classe de toutes les classes des mouvement des doigts et du pouce pour accéder à leur fonction <<RetournePostionInitiale()>> qui sera appelée dans la fonction, lorsque le <<Toggle>> sera coché. Cela permet à l’utilisateur, lorsqu’il coche le <<Toggle>> de voir correctement les noms des os avec leur bon os ou leur bon doigt.
La quatrième journée (12 et 13 mai 2020), j’ai fait des Animators incrémentées dans dans une Animation située dans la main et une autre dans le GameObject vide où la main a été placée. En premier, je n’avais que des Animators, mais, lorsque j’essayais de les jouer, il ne jouait pas. Donc, après une longue recherche de trois heures, j’ai trouver une solution. Celle-ci consiste a mettre les Animators dans une Animation située dans l’objet qui doit bouger. Puis, de changer les Animators en Legacy. Ensuite, j’ai fait des bouton qui ont accès au scripte, qui permet de jouer l’animation, et aux Animations des objets. D’un autre côté, pour des raisons personnelles, j’ai changé le code de la rotation gauche et droite de la main et de l’avant-bras et celui du code <<Legende>> pour que, lorsque que le <<Toggle>> est coché, il soit impossible de faire rotationner la main et l’avant-bras. Pour ça, j’ai mis dans le scripte << Rotation_Main_Os>> un public Legende pour accéder à sa nouvelle fonction << RetourneActivation() >> qui retourne un bool représentant le <<Toggle>> coché ou non. Donc, avec cette fonction, j’ai placé stratégiquement dans le scripte << Rotation_Main_Os>> des if(Activation.RetourneActivation() == false) qui font que, si le <<Toggle>> est coché, il est impossible de provoquer la rotation de la main et de l’avant bras. Pour finir, j’ai mis un bouton Menu pour retourner au menu principal.

Lien : https://www.supinfo.com/articles/single/7149-creer-utiliser-animations-unity, https://openclassrooms.com/forum/sujet/unity-declenchement-animation-avec-trigger, https://forum.unity.com/threads/how-to-activate-animation-just-when-give-click-on-a-button.379922/, https://answers.unity.com/questions/7555/how-do-i-call-a-function-in-another-gameobjects-sc.html, https://stackoverflow.com/questions/31593008/changing-color-of-of-gameobject-in-unity, https://www.google.com/search?q=Os+de+l%27avant+bras&client=firefox-b-d&sxsrf=ALeKk03MOWN1dORpZ3_OD0KzrRVDxrMMWw:1589317994845&source=lnms&tbm=isch&sa=X&ved=2ahUKEwi-55H0nq_pAhXflHIEHYcDBnEQ_AUoAXoECA8QAw&biw=1536&bih=750#imgrc=QyfaHLq9LzcNsM, https://www.google.com/search?q=os+de+la+main&client=firefox-b-d&sxsrf=ALeKk03cml7DhoPyS9UZVN6ibMYUFCgcEQ:1589313979150&tbm=isch&source=iu&ictx=1&fir=l3Gl92_iyd2VuM%253A%252CP-BZoiPg8vq2WM%252C_&vet=1&usg=AI4_-kSe5RrDAI9eSpZ8a1hs2yyRIj-Qxg&sa=X&ved=2ahUKEwiRoaf5j6_pAhXVhHIEHZJfAvYQ9QEwAHoECAoQHQ#imgrc=GUYlBpfidDzenM.