Bonjour à tous,
Est-ce que quelqu'un pourrait m'aider pour mon problème ci-dessous en précisant un peu le contexte:
Voici un extrait de mon jeu : https://youtu.be/avdTOwlGzM4
https://youtu.be/avdTOwlGzM4
J'utilise le modèle 3D suivant pour le personnage que le joueur contrôle : https://assetstore.unity.com/packages/3 ... art-106154
Dans mon jeu, ce modèle 3D exécute en permanence l'animation "idle_shoot_Ar" afin que le personnage donne l'impression de "respirer".
Mon problème est le suivant :
Dans mon jeu (qui est un FPS), lorsque je vise vers le haut ou vers le bas, je souhaiterais pouvoir faire une rotation sur l'axe X de la colonne vertébrale (spine) du modèle 3D afin que ce soit plus réaliste. Car actuellement c'est l'ensemble du modèle 3D qui fait une rotation (même si ca ne se voit pas in game... ^^).
Lorsque je ne suis pas en "play mode", j'arrive bien à faire la rotation du "spine" pour avoir cette effet, donc à mon avis le rigging semble bon. Mais mon problème c'est que dès que je passe en "play mode", même si je viens modifier la rotation sur l'axe souhaité, cela ne fonctionne pas. J'ai l'impression qu'automatiquement l'animation "idle_shoot_Ar" prend le dessus.
En creusant j'ai entendu parlé du "Inverse Kinematics", mais je ne suis pas sûr que cela puisse m'aider. Est-ce possible de faire une sorte "d'overwrite" sur une animation en cours.
En gros, j'aimerais rajouter une animation (rotation du buste/movement colonne vertébrale) sur l'animation en cours.
Est-ce possible ? Peut-être que je m'y pas mal... Comment gérer cela ?
Est-ce que ce post c'est une bonne piste / solution (overwrite dans le lateUpdate) ? ==> https://answers.unity.com/questions/126 ... ation.html
En espérant qu'un de vous puisse m'aider ^^'
[RESOLU] Inverse Kinematics ou pas ?
Re: [Need help] Inverse Kinematics ou pas ?
As-tu essayer un Blend Tree?
Re: [Need help] Inverse Kinematics ou pas ?
Ton probleme n'en est pas un et est tout a fait normal.
en dehors du mode play, tu peut en effet donner la rotation que tu veux a chacun des bones, mais des que tu va mettre sur play, il vont reprendre leur rotation définies par l'animation, c'est elle qui prime.
Et je pense cela n'aura pas grand chose a voir avec inverse kinematics.
Une solution un peut barbare serait d'avoir des doublons des bones.
En gros, une exemplaire de ton perso, avec les bones et leurs animations, mais sans le mesh, et un autre ave les bones, les mesh mais pas les animation.
mettre chaque bones sans animation enfant de la même bone avec animation. donc l'animation va deplacer les bones avec animation qui, étant leurs parents vont déplacer les bones sans animation qui elles vont déformer/animer le mesh de ton perso.
A ce moment tu pourra donner des rotation locales supplémentaires au bones sans animation qui suivront toujours l'animation du parent mais avec un offset.
Je ne sais pas si ça peut marcher mais cela me semble cohérent. sinon refaire une animation suplémentaire avec blender par exemple pour l'action de viser vers le haut ou le bas.
en dehors du mode play, tu peut en effet donner la rotation que tu veux a chacun des bones, mais des que tu va mettre sur play, il vont reprendre leur rotation définies par l'animation, c'est elle qui prime.
Et je pense cela n'aura pas grand chose a voir avec inverse kinematics.
Une solution un peut barbare serait d'avoir des doublons des bones.
En gros, une exemplaire de ton perso, avec les bones et leurs animations, mais sans le mesh, et un autre ave les bones, les mesh mais pas les animation.
mettre chaque bones sans animation enfant de la même bone avec animation. donc l'animation va deplacer les bones avec animation qui, étant leurs parents vont déplacer les bones sans animation qui elles vont déformer/animer le mesh de ton perso.
A ce moment tu pourra donner des rotation locales supplémentaires au bones sans animation qui suivront toujours l'animation du parent mais avec un offset.
Je ne sais pas si ça peut marcher mais cela me semble cohérent. sinon refaire une animation suplémentaire avec blender par exemple pour l'action de viser vers le haut ou le bas.
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: [Need help] Inverse Kinematics ou pas ?
Hello,
Merci pour vos retours.
Non je n'ai pas tester Blend Tree mais je vais regarder à quoi cela sert, c'est toujours intéressant.
Effectivement, djulio74 tu as raison, l'animation reprend toujours le dessus. J'ai testé et implémenté la solution décrite ici est elle fonctionne parfaitement : http://redirect.viglink.com/?format=go& ... ation.html
En quelques mots, la solution consiste à stocker dans une variable la position à laquelle on souhaite faire bouger l'objet. Et dans le lateUpdate on vient "écraser" la position générée par l'animation par celle de notre variable. Et ça fonctionne à merveille.
Voilà ce que ça donne avec un extrait de code :
1. Je récupère les positions initiales à la création du gameObject :
2. Je gère le mouvement dans la fonction LateUpdate():
Merci pour vos retours.
Non je n'ai pas tester Blend Tree mais je vais regarder à quoi cela sert, c'est toujours intéressant.
Effectivement, djulio74 tu as raison, l'animation reprend toujours le dessus. J'ai testé et implémenté la solution décrite ici est elle fonctionne parfaitement : http://redirect.viglink.com/?format=go& ... ation.html
En quelques mots, la solution consiste à stocker dans une variable la position à laquelle on souhaite faire bouger l'objet. Et dans le lateUpdate on vient "écraser" la position générée par l'animation par celle de notre variable. Et ça fonctionne à merveille.
Voilà ce que ça donne avec un extrait de code :
1. Je récupère les positions initiales à la création du gameObject :
Code : Tout sélectionner
void Start()
{
.......
// Spine movement management
spine = transform.Find("Hips").gameObject.transform.Find("Spine").gameObject;
spinePositionZ = spine.transform.rotation.z;
}
Code : Tout sélectionner
void LateUpdate(){
float verticalDelta = crosshVerticalSpeed * Input.GetAxis("Mouse Y");
spinePositionZ += verticalDelta;
spine.transform.eulerAngles -= new Vector3(spinePositionZ, 0, 0);
}
Re: [Need help] Inverse Kinematics ou pas ?
Parfait si tu as trouvé une solution, et merci de l'avoir partagée.
En effet bien plus simple que ma version "bourrin" que je proposais
Quand a réponse à la question initiale à été trouvé , pense à éditer le titre de ton premier message pour le passer en résolu en ajoutant [RÉSOLU]. Je te lai fais cette fois ci.
De plus, inutile d'ajouter [need help] à ton titre, par défaut quand on post sur un forum c'est principalement pour avoir de l'aide justement
Bonne continuation,
Julien
En effet bien plus simple que ma version "bourrin" que je proposais
Quand a réponse à la question initiale à été trouvé , pense à éditer le titre de ton premier message pour le passer en résolu en ajoutant [RÉSOLU]. Je te lai fais cette fois ci.
De plus, inutile d'ajouter [need help] à ton titre, par défaut quand on post sur un forum c'est principalement pour avoir de l'aide justement
Bonne continuation,
Julien
______________________________________________________________
\_______________________ Impossible is nothing _______________________/