Re: [MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Publié : 17 Août 2022 08:42
Donc ?
Le forum de la communauté francophone d'Unity
http://www.unity3d-france.com/unity/phpBB3/
http://www.unity3d-france.com/unity/phpBB3/viewtopic.php?f=89&t=18744
Code : Tout sélectionner
private void OnTriggerEnter(Collider other)
{
if (other.name == "Cube")
{
=> EstPropulse = True;
=> Jouer animation de la propulsion
=> Jouer le son de la propulsion
moveDirection.y = 30;
moveDirection.z = 1000f;
=> //characterController.Move(moveDirection *Time.deltaTime);
=> Timer de 1 seconde pour attendre => genre "yield return new WaitForSeconds(1);"
=> EstPropulse = False;
=> Si animation de la propultion est toujours en cours => arret animation
=> Si le son de la propulsion est toujours en cours => arret du son
}
Code : Tout sélectionner
public class PlayerMouvement : MonoBehaviour
{//Camera
...
..
.
//Marche ou court ?
private bool isRunning = false;
// Propulse ou on
public bool Estpropulse = false; // <= Attention à la portée de la variable peut-être privat fonctionnerait aussi.
...
..
.
Code : Tout sélectionner
// Update is called once per frame
void Update()
{
//Calcule les directions
//forward = avant/arrière
//right = droite/gauche
Vector3 forward = transform.TransformDirection(Vector3.forward);
Vector3 right = transform.TransformDirection(Vector3.right);
//Est-ce qu'on appuie sur un bouton de direction ?
// Z = axe arrière/avant
float speedZ = Input.GetAxis("Vertical");
// X = axe gauche/droite
float speedX = Input.GetAxis("Horizontal");
// Y = axe haut/bas
float speedY = moveDirection.y;
// Est-ce que le joueur est propulse ou non? Si le joueur est propulsé => rien à faire; sinon :
if (!Estpropulse){
//Est-ce qu'on appuie sur le bouton pour courir (ici : Shift Gauche) ?
if (Input.GetKey(KeyCode.LeftShift))
{
//En train de courir
isRunning = true;
}
else
{
//En train de marcher
isRunning = false;
}
// Est-ce que l'on court ?
if (isRunning)
{
//Multiplie la vitesse par la vitesse de course
speedX = speedX * runningSpeed;
speedZ = speedZ * runningSpeed;
}
else
{
//Multiplie la vitesse par la vitesse de marche
speedX = speedX * walkingSpeed;
speedZ = speedZ * walkingSpeed;
}
//Calcul du mouvement
//forward = axe arrière/avant
//right = axe gauche/droite
moveDirection = forward * speedZ + right * speedX;
// Est-ce qu'on appuie sur le bouton de saut (ici : Espace)
if (Input.GetButton("Jump") && characterController.isGrounded)
{
moveDirection.y = jumpSpeed;
}
else
{
moveDirection.y = speedY;
}
//Si le joueur ne touche pas le sol
if (!characterController.isGrounded)
{
//Applique la gravité * deltaTime
//Time.deltaTime = Temps écoulé depuis la dernière frame
moveDirection.y -= gravity * Time.deltaTime;
}
} // FIN DE if (!Estpropulse)
//Applique le mouvement
characterController.Move(moveDirection * Time.deltaTime);
//Rotation de la caméra
...
..
.
Code : Tout sélectionner
yield return new WaitForSeconds(1);
Code : Tout sélectionner
private void OnTriggerEnter(Collider other)
Code : Tout sélectionner
IEnumerator OnTriggerEnter(Collider other)