[Résolu] Je ne comprend pas un code

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
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
Kamiloo95
Messages : 72
Inscription : 06 Avr 2015 10:14

[Résolu] Je ne comprend pas un code

Message par Kamiloo95 » 01 Août 2015 01:23

Bonjour a tous,
C'est un peu osé ce que je vais vous demander et vous allez peut être m'envoyer balader mais je tente quand meme le coup,
J'ai recemment téléchargé et importé des assets dans l'asset store, un personnage avec animations etc. et je suis en train d'essayer de mettre les animations sur le personnage, j'ai commencé par creer un animator ect ect ect. MAIS j'ai fait tout ca pour rien car il y avait deja un script pour les animations sauf que c'est un script de demo c'est-à-dire que je dois appuier sur des boutons pour jouer l'animation et moi je veut faire en sorte que quand le personnage marche, il y ait l'animation ect. donc je dois comprendre le script de demo et c'est là que ca bloque car JE NE COMPREND ABSOLUMENT RIEN :lol: ( il faut dire que je ne suis pas un exper sur unity et je debute encore ;) ) donc j'aurais besoin de votre aide pour comprendre ce code ( c'est du javascript ) :

Code : Tout sélectionner

#pragma strict
var roteSpeed:float = 0.0;

var animationSpeed:float =1.0;
private var animationCount:uint;
private var animationList:Array;
function Start () {
     print("animationGetCount:" + GetComponent(Animation).GetClipCount());
     print(GetComponent(Animation).clip.name);
     animationCount = GetComponent(Animation).GetClipCount();
     print(gameObject.GetComponent(Animation));
     animationList = GetAnimationList();
}

function Update () {
  
     transform.eulerAngles.y += roteSpeed;

}

function OnGUI (){
     var margin : int = 10;

     //Buttons
     var buttonSpace:int = 25;
     var rectWidth:int = 100;
     var rectHeight:int = 40;
     var max:int = 10;
     var rects:Array = new Array();
     var i:int = 0;

     for (var name : String in animationList)
     {
          var rect:Rect = Rect(15,margin + 20*i + buttonSpace*i, rectWidth,rectHeight);
          if(GUI.Button(rect,animationList[i].ToString())){
               GetComponent(Animation).CrossFade(animationList[i],0.01);
          }
          i++;
     }
}

private function GetAnimationList():Array
{
     var tmpArray = new Array();
     for (var state : AnimationState in gameObject.GetComponent(Animation))
     {
          tmpArray.Add(state.name);
     }
     return tmpArray;
}
Pour moi l'ensemble du code est à peu près imcompréhesible mais là où je bloque vraiment c'est surtout à partir de la boucle for de la fonction OnGUI(), ainsi que la fonction GetAnimationList().

J'ai vraiment besoin d'aide car je n'y arriverai pas tout seul.
Merci d'avance pour votre aide
Merci
Merci
Merci

:)
Dernière édition par Kamiloo95 le 03 Août 2015 02:34, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Je ne comprend pas un code

Message par Max » 01 Août 2015 11:48

Bonjour Kamiloo95

Tu sembles avoir saisi d'une manière générale ce que faisait ce script.
Pour le reste, la fonction GetAnimationList permet d'aller chercher les différentes animations présentes du composant 'Animation' de ton gameobject, et de retourner cela pour alimenter animationList.
La partie OnGUI, quand à elle permet d'afficher sous forme de bouton les anim disponibles et de fait aussi de pouvoir sélectionner celle que l'on souhaite voir jouée sur le modèle en rotation.

Tout cela reste très 'basic', à la fois en terme de code, comme au niveau des animations.
Si cela bloque déjà là pour toi, je ne peux que te conseiller de pratiquer un peu, en particulier par le biais de quelques tuto. Tout ce qui touche aux animations dans un jeu est certainement une des parties les plus délicate à maitriser, donc avant d'arriver à être à son aise, il faut se faire la main, surtout qu'Unity propose beaucoup de choses, ce qui est bien, mais cela engendre aussi forcement un réel apprentissage pour en appréhender les mécanismes, au moins à minima ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Kamiloo95
Messages : 72
Inscription : 06 Avr 2015 10:14

Re: Je ne comprend pas un code

Message par Kamiloo95 » 01 Août 2015 19:53

Bonjour à toi, merci de ta réponse,
Tout d'abord, oui je compte bien apprendre les animations sur unity parce que je suis P.E.R.D.U :D, le site unity contient plusieurs tutos je vais surement passer plusieurs semaines dessus.
Ensuite, ce que je voudrais faire n'est pas bien compliqué, le problème, je voudrais juste modifier ce code pour que par exemple quand je joueur avance,
l'animation en suit. J'ai quelques base sur les animations, comme l' "animator controller ", le component " animation " aussi, mais dans ce cas là c'est un peu plus compliqué, car je ne peut pas reprendre les animations en .anim pour les mettre dans mon " animator controller" , donc je suis contraint d'utiliser ce script.
Aurais tu un petit conseil pour m'aider ? Une petite base, un petit exemple en reprenant le code ci-dessus pour me montrer comment je pourrais faire par exemple en appuyant sur un touche que l'animation se joue ? Ça m'aiderais beaucoup.

Merci.

Avatar de l’utilisateur
Franck
Bricoleur
Bricoleur
Messages : 2884
Inscription : 08 Jan 2011 18:43
Localisation : Tours

Re: Je ne comprend pas un code

Message par Franck » 02 Août 2015 09:45

Dés fois j'bug, dés fois j'bug pas.

Kamiloo95
Messages : 72
Inscription : 06 Avr 2015 10:14

Re: Je ne comprend pas un code

Message par Kamiloo95 » 03 Août 2015 02:03

Ok merci beaucoup,
J'ai réussi, ce que j'ai fait :
J'ai enlevé toute la fonction OnGUI(),
Dans la fonction Update() j'ai mis

Code : Tout sélectionner

if (Input.GetKeyDown("a"))
	 GetComponent(Animation).CrossFade(animationList[0]);
	 
	 if (Input.GetKeyDown("z"))
	 GetComponent(Animation).CrossFade(animationList[1]);
	 
	 if (Input.GetKeyDown("e"))
	 GetComponent(Animation).CrossFade(animationList[2]);
	 
	 if (Input.GetKeyDown("r"))
	 GetComponent(Animation).CrossFade(animationList[3]);
	 
	 if (Input.GetKeyDown("t"))
	 GetComponent(Animation).CrossFade(animationList[4]);
et ça marche.
Merci

Verrouillé

Revenir vers « (Js) Javascript »