Utilisation des layers dans Animator

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Utilisation des layers dans Animator

Message par Axel74 » 17 Nov 2016 11:58

Bonjour / bonsoir tout le monde !

Dernièrement j'en ai appris beaucoup sur les possibilités des animations avec Unity.
Je me prépare un petit projet de jeu simple, mais où j'ai besoin de jouer avec l'animation d'un personnage.

J'ai donc pris un model 3D sur le store et je bloque maintenant sur une utilisation "optimale" des animations proposées.

Je me sert de l'Animator uniquement ainsi que les layers et les layers mask pour combiner les animations les unes aux autres.

Là où je bloque, c'est que je ne trouve pas le moyen de jouer uniquement un de ces layers (animation) une seule fois, lorsque je clique sur un bouton, au lieu de passer par la commande :

Code : Tout sélectionner

animator.SetLayersWeight(1,1);
Pour le moment l'animation démarre, lorsque je clique, en boucle et non à partir du début mais à partir du moment à laquelle l'animation est déjà jouée (car même le layers désactivée, l'animation tourne en boucle). Les habitués comprendront certainement ce que je veux dire et si vous avez une solution, merci d'avance pour votre aide ! :super:
Douille ou l'ail que pote étaux ? Yes I like.

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: Utilisation des layers dans Animator

Message par ZJP » 17 Nov 2016 16:51

Code : Tout sélectionner

animator.SetLayersWeight(1,1);
n'est pas suffisant pour un début de solution. Il manque une copie d'écran de l'Animator Controller et des ses Layers. ;)

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: Utilisation des layers dans Animator

Message par Axel74 » 17 Nov 2016 18:14

Tout mes layers se présentent comme ceci.

Image


Chacun avec une animation différentes, avec un avatar mask adapté à ce que je souhaite pour les mélanger entre elles, sur ça j'ai tout ce qu'il faut en main.

J'ai essayé avec un "New StateMachine", lui ajouter un script etc en fouinant un peu la doc et trouver comment ça fonctionne vraiment, puis je me suis perdu sans vraiment savoir si j'allais dans la bonne direction ^^ J'ai essayé avec ceci :

Code : Tout sélectionner

void OnStateEnter (Animator anim, AnimatorStateInfo stateInfo, int layerIndex) //ici j'ai recopié sur la doc sans vraiment être sur si j'ai besoin de toute ces valeurs
{
	if(anim.GetLayerWeight(3) == 1){
		anim.SetLayerWeight (3.0);
	}
}
Du coup je me suis rendu compte que même en faisant la liaison après mon "state animation", le chemin ne rentre pas dans la StateMachine et tourne en boucle sur l'animation malgré ça.
Douille ou l'ail que pote étaux ? Yes I like.

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: Utilisation des layers dans Animator

Message par ZJP » 17 Nov 2016 20:21

En résumé tu as :
- Une animation par Layer qui démarre TOUTES en même temps (car elles sont en "Default" sur leur Layer respectif)
- Ces animations sont du type LOOP (elles bouclent)
- Tu valides l'Animation qui t’intéresse en mettant le Weight du Layer à "1" et les autres Weight à "0"
etc etc ...

Pas très orthodoxe....et c'est normal qu'en switchant un Layer tu "tombes" à n'importe quel moment de l'animation jouée : La mise à "0" du Weight n’arrête pas l'animation en cours, de même que la mise à "1" ne lance pas l'animation.
Le Weight sert a mixer les animations des Layers 1 à Xn avec le Layer 0.

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: Utilisation des layers dans Animator

Message par Axel74 » 17 Nov 2016 21:44

En effet je m'en suis assez vite rendu compte que je ne faisais que switcher les animations entre elles. En ce qui concerne jouer une animation présente dans les layers.. je continue à chercher une solution qui s'approcherai de ce que je cherche mais rien.

Entre temps j'ai trouvé le SetInteger :
https://docs.unity3d.com/ScriptReferenc ... teger.html
et l'exemple que je n'ai pas très bien compris avec son histoire de handManager (script) qu'il met sur chaque mains... Y a pas plus simple ?
http://pastebin.com/d1BNaRUg

Voilà ce que j'ai essayé avec ce que j'ai compris :

Code : Tout sélectionner

public GameObject id1;

void Update () {
	...
	...
	int id = id1.transform.GetInstanceID();
	anim.SetInterger("Attack", id); //attack étant le nom d'un paramètre (onglet à côté de Layers), de type int, float, trigger ou bool
}
Pour le ID je suis allé dans debug, transform et là l'instance ID de mon objet. Mais bon soit je m'éloigne complètement soit il va me falloir un bon tuto parce que je commence à me perdre...
Douille ou l'ail que pote étaux ? Yes I like.

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: Utilisation des layers dans Animator

Message par ZJP » 17 Nov 2016 22:12

Axel74 a écrit :En effet je m'en suis assez vite rendu compte que je ne faisais que switcher les animations entre elles.
Bin non, tu "switch" les Layers dans l'absolu. Pas les anims. :?

Regardes ici :
https://www.youtube.com/watch?v=wdOk5QXYC6Y

Sinon, a quoi te servent les Mask?
Dernière édition par ZJP le 18 Nov 2016 02:52, édité 1 fois.

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: Utilisation des layers dans Animator

Message par Axel74 » 18 Nov 2016 00:32

Wow j'ai l'impression de découvrir un nouveau logiciel c'est tellement complexe 8/ Mais nickel grâce à ta vidéo j'ai pu vraiment comprendre beaucoup de chose. J'y ai passé du temps mais ça m'a vraiment servi merci :super:
Douille ou l'ail que pote étaux ? Yes I like.

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: Utilisation des layers dans Animator

Message par ZJP » 18 Nov 2016 02:52

A ton service. ;)

Répondre

Revenir vers « Scripting »