Character Controller & Animation

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Chamalo
Messages : 18
Inscription : 26 Juin 2016 21:19

Character Controller & Animation

Message par Chamalo » 26 Juin 2016 21:30

Bonjour à tous,
je débute sur Unity 3D, et j'aimerais créer un petit jeu type plateforme avec une vue 3D ( vue de coté comme un jeu de plateforme classique, mais avec la caméra un peu inclinée vers le bas pour faire ressortir la 3D.) J'ai déjà mon script pour déplacer mon personnage de droite à gauche en avant et en arrière, et pour le faire sauter.
Le premier problème est que, quand j'appuie sur la barre espace pour sauter, l'animation se déclenche mais trop lentement : il faut laisser appuyer espace pour que l'animation se déclenche en entier, hors j'aimerais que dès que le joueur appuie sur espace, l'animation se joue.
De plus, lors de l'animation de saut, le Character Controller du personnage ne suit pas l'animation, il reste au sol et donc le personnage ne peut pas sauter sur un bloc en hauteur, il est bloqué par le Character Controller.
Voilà, j'ai quasiment aucune notion en programmation, donc si quelqu'un a une solution claire que je puisse comprendre, je prend ::d
Merci

Avatar de l’utilisateur
kanthor
Messages : 5
Inscription : 25 Juin 2016 14:18

Re: Character Controller & Animation

Message par kanthor » 26 Juin 2016 23:39

Bonjour chamallo !

Je ne suis pas un grand connaisseur de Unity (à vrai dire, je viens d'arriver ici) mais d'un point de vue programmation, je sais qu'il y a une certaine nuance lorsqu'on mappe des touche entre le click et le press. Plus exactement tu peux mapper ton action sur le simple appui, ou alors le appui + relâchement. De plus, il est courant de voir dans les plateformers la notion de puissance de saut fonction du temps d'appui sur la touche choisi (c'est le cas pour Mario et Super Meat Boy d'ailleurs :) )

D'ailleurs j'ai une question pour toi (et même pour tout le monde d'ailleurs), as-tu déjà regardé ce qu'il existait déjà en terme de développement sur unity pour ce qui est plateformer 2D? Dés fois, ça ne vaut pas le coup de "réinventer la roue" (c'est un principe qu'on applique beaucoup en informatique) et peut être qu'il existe un moteur déjà tout fait et qui te permettrait de te concentrer plus sur ce qui fait de ton jeu un platformer unique. :)

Voilà, j’espère que ça aura pu t'aider et bon courage pour la suite!. ;-)

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Character Controller & Animation

Message par Moi 1971 » 27 Juin 2016 11:23

Bonjour,
je pense qu'il va falloir que tu nous communiques ton code (affiché dans les balises code)
En suite:
J'ai déjà mon script pour déplacer mon personnage de droite à gauche en avant et en arrière, et pour le faire sauter.
Donc le saut fonctionne?
il reste au sol et donc le personnage ne peut pas sauter
Donc le saut ne fonctionne pas?

Chamalo
Messages : 18
Inscription : 26 Juin 2016 21:19

Re: Character Controller & Animation

Message par Chamalo » 27 Juin 2016 11:30

Merci de ta réponse :-D

Oui c'est sur, j'aimerais bien que le saut aie une puissance différent en fonction de la durée ou l'on appuie sur la barre espace, mais j'ai aucune idée de comment faire. Pour l'instant j'ai mon personnage qui se déplace, avec une animation qui se joue pendant qu'il marche, et l'animation iddle qui se joue quand il ne bouge pas. Sauf que, quand on appuie sur la barre espace, l'animation de saut se joue mais le collider ne change pas de place.
collider_erreur.png
collider_erreur.png (85 Kio) Consulté 4906 fois
Donc j'aimerais juste, pour l'instant, que le collider suive l'animation pendant le saut. Voila le code entier, si jamais ça à résoudre mon problème.

Code : Tout sélectionner

#pragma strict

@script RequireComponent(CharacterController)

//les variables

var vitesseMouvement = 4.0;
var vitesseRotation = 3.0;
var anim : Animation;

//animation

function Update () {


		if(Input.GetKey(KeyCode.Space)){

		anim.CrossFade("jump");
	}

			if(Input.GetKey(KeyCode.Z)){

		anim.CrossFade("walk_normal");
	}

			if(Input.GetKey(KeyCode.S)){

		anim.CrossFade("walk_normal");
	}


//si toutes ces touches ne sont pas appuyées, alors iddle se joue

	if (!Input.GetKey(KeyCode.Z) && !Input.GetKey(KeyCode.Space)){
	anim.CrossFade("idle_normal");

	}
//Deplacement + rotation du perso

var controller : CharacterController = GetComponent(CharacterController);
transform.Rotate(0, Input.GetAxis("Horizontal")*vitesseRotation, 0);

var enAvant = transform.TransformDirection(Vector3.forward);
var vitesseDeplacement = vitesseMouvement * Input.GetAxis("Vertical");

controller.SimpleMove(enAvant * vitesseDeplacement);


}
EDIT par rapport au message de Moi :

L'animation de saut fonctionne, mais le personnage de peut pas sauter sur un cube par exemple car le collider reste au sol.

Et au sujet de moteur de plateformer 2D j'ai cherché pas mal, mais je trouve pas grand chose.

Voilà, j'espère que quelqu'un trouvera une solution parce que je vois pas comment faire :?

Merci de votre aide

Avatar de l’utilisateur
kanthor
Messages : 5
Inscription : 25 Juin 2016 14:18

Re: Character Controller & Animation

Message par kanthor » 27 Juin 2016 12:28

J'ai toujours pas de réponses pour ton problème, mais j'ai trouvé ceci :

https://www.assetstore.unity3d.com/en/#!/content/61267

Apparemment un noyau (gratuit) pour platformer. Je me suis dit qu'au mieux ça pourrait t’intéresser directement, et qu'au pire il y aurait peut être la réponse à ta question dans les sources (incluses).

En espérant que ça puisse t'aider ^^

Chamalo
Messages : 18
Inscription : 26 Juin 2016 21:19

Re: Character Controller & Animation

Message par Chamalo » 27 Juin 2016 13:22

J'ai testé vite fait le moteur, ça a l'air pas mal mais ça correspond pas avec ce que j'ai déjà fait. Les scripts sont en C#, donc ça m'aide pas beaucoup (déjà que je galère avec le Javascript...) et le jeu est en 2D donc c'est pas du tout fait de la même manière, c'est des sprites qui sont utilisés et pas des modèles 3D comme dans mon projet d'origine. En fait il faudrait que je trouve un moteur de jeu 3D style MMORPG (juste pour les déplacements et les sauts) Je vais faire des tests avec les Standards Assets fournis par Unity et le third person character controller , peut être que j'arriverais a faire ce que je veux :-D
Merci pour ton aide

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Character Controller & Animation

Message par Moi 1971 » 27 Juin 2016 13:46

Si jamais tu veux corriger ton code.
1/ Si tu commence l'apprentissage de la programmation, passe directement au C#.
2/ Ton problème de collider qui ne suit pas ton anim, c'est que le collider devrait être "enfant" de ton perso dans la hiérarchie Unity. Comme ça quand ton perso bouge, le collider suit tout seul son "Parent" (le perso)
2/ Ton problème avec le saut avec un appui long sur la barre espace, vient de ta structure de "if(Input.GetKey....)" placer dans la fonction Update(). Ton code dit "si j’appuie sur espace => saut" et juste après ton code dit "si j’appuie sur rien => idle_normal"
Donc, dès que tu relâches la touche espace, c'est bien l'animation idle_normal qui se joue, avant la fin de l'animation saut.
Tu peux utiliser l'animator controller pour faire moins de code.
la Doc : http://docs.unity3d.com/Manual/Animator.html
Et dans google tu trouveras des tonnes d'exemples.

Chamalo
Messages : 18
Inscription : 26 Juin 2016 21:19

Re: Character Controller & Animation

Message par Chamalo » 27 Juin 2016 14:06

Je ne vois pas le collider dans l'onglet hierarchy, mais il est déjà lié au perso, quand le perso se déplace avec l'animation de marche et en utilisant les touches du clavier le collider suit bien, c'est juste pour l'animation de saut que le collider reste au sol

Image

Image


J'ai tester un peu le Third Person Character Controller, ça se rapproche beaucoup de ce que j'aimerais faire, mais les scripts sont en C# et j'aimerais changer le modèle et les animation, je pense que je peux réussir à faire ça.

Merci pour les conseils

Chamalo
Messages : 18
Inscription : 26 Juin 2016 21:19

Re: Character Controller & Animation

Message par Chamalo » 28 Juin 2016 10:35

Bon, je galère....

J'ai toujours pas réussi a changer d'animation et de modèle, donc je pense que je vais abandonner cette solution et reprendre mon premier script.

J'aimerais savoir comment ajouter une fonction saut à ce script, parce que pour l'instant quand on appuie sur la barre espace c'est juste l'animation qui se joue, mais c'est pas considéré comme un saut. Voilà, j'espère trouver une solution parce que j'ai pas avancé pour l'instant...

Mon script actuel :

Code : Tout sélectionner

#pragma strict

@script RequireComponent(CharacterController)

//les variables

var vitesseMouvement = 4.0;
var vitesseRotation = 3.0;
var anim : Animation;

//animation

function Update () {


		if(Input.GetKey(KeyCode.Space)){

		anim.CrossFade("jump");
	}

			if(Input.GetKey(KeyCode.Z)){

		anim.CrossFade("walk_normal");
	}

			if(Input.GetKey(KeyCode.S)){

		anim.CrossFade("walk_normal");
	}


//si toutes ces touches ne sont pas appuyées, alors iddle se joue

	if (!Input.GetKey(KeyCode.Z) && !Input.GetKey(KeyCode.Space)){
	anim.CrossFade("idle_normal");

	}
//Deplacement + rotation du perso

var controller : CharacterController = GetComponent(CharacterController);
transform.Rotate(0, Input.GetAxis("Horizontal")*vitesseRotation, 0);

var enAvant = transform.TransformDirection(Vector3.forward);
var vitesseDeplacement = vitesseMouvement * Input.GetAxis("Vertical");

controller.SimpleMove(enAvant * vitesseDeplacement);


}

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Character Controller & Animation

Message par Moi 1971 » 28 Juin 2016 17:36

Bonjour,
Pour sauter, tu as deux solutions.
Soit tu utilises la même méthode que ton déplacement avec "controller.SimpleMove(enAvant * vitesseDeplacement);" mais en remplaçant le vecteur "enAvant" par un vecteur qui va vers le haut et la variable "vitesseDeplacement" par une autre.
Soit tu utilises la physique Unity avec les AddForces. Avec cette méthode tu appliques une force initiale de bas en haut qui va propulser ton perso. En ajustant cette force ton perso ira plus ou moins haut. Mais il faut alors bien paramétrer le poids du RigidBody ainsi que les frottements... Il y a plein de sujets ici et d'autres en recherchant sur Google.

Répondre

Revenir vers « Unity le logiciel »