Je viens faire appel à votre savoir parce que j'ai un petit soucis que je ne comprend pas...
Je travaille sur un projet de jeu 2D, j'ai donc un personnage 2D, avec trois animations: Idle, Run-Right et Run-Left (c'est un modèle 3D que j'ai créé à la base et j'en ai fais des sprites avec Blender). J'aimerais que mon personnage cours vers la droite ou vers la gauche et que lorsque qu'il s'immobilise, l'animation Idle se lance. J'ai donc essayé diverses méthodes, comme par exemple utiliser "is moving" ou "rigidbody.velocity.magnitude = 0" mais pour une raison que j'ignore, ça ne fonctionne pas.
Mais ce n'est pas tout. Lorsque mon personnage rentre en collision avec des objets (qui dans mon cas, tombent du ciel) mon personnage "bascule". Alors là, la solution est toute trouvée, je check les contraintes du rigidbody de position Y et de rotation Z, oui mais... Pour une raison que j'ignore, lorsque je fais ça mon personnage continue de courir même lorsqu'il n'est plus censé le faire.
Donc question:
- Comment faire pour que mon personnage joue l'animation Idle lorsqu'il est immobile ?
- Comment faire pour que mon personnage ne bascule pas et ne continue pas de courir lorsque j'active les contraintes ?
Voici mon code:
Code : Tout sélectionner
void Update()
{
int i = 0;
while(i < Input.touchCount)
{
if(Input.GetTouch(i).position.x > screenWidth / 2)
{//right
RunCharacter(1.0f);
anim.SetBool("Run_Right", true);
anim.SetBool("Run_Left", false);
anim.SetBool("Idle", false);
}
if(Input.GetTouch(i).position.x < screenWidth / 2)
{//left
RunCharacter(-1.0f);
anim.SetBool("Run_Right", false);
anim.SetBool("Run_Left", true);
anim.SetBool("Idle", false);
}
if(characterBody.velocity.magnitude == 0)
{//idle
anim.SetBool("Idle", true);
anim.SetBool("Run_Right", false);
anim.SetBool("Run_Left", false);
}
i++;
}
}
void FixedUpdate()
{
#if UNITY_EDITOR
RunCharacter(Input.GetAxis("Horizontal"));
#endif
}
private void RunCharacter(float horizontalInput)
{
characterBody.AddForce(new Vector2(horizontalInput * moveSpeed * Time.deltaTime, 0));
}