[RÉSOLU][MY-AL] Propulsion de joueur de quelques mètres au lieu d'être éjecté
Publié : 08 Août 2022 16:25
Bonjour à tous,
j'en appelle encore a vos conseils d'expert.
J'ai récupéré le code de déplacement suivant :
J'ai ajouté au script d'origine la partie concernant le trigger.
Si j'enlève les // devant le movedirection.y,
...le Player saute bien au contact du trigger
Par contre, en ce qui concerne d'avancer, il avant mais de quelques mètres seulement. Rien a voir avec le saut malgré les 2 valeurs bien différentes.
Le but est que le joueur soir propulsé vers l'avant et un peu en hauteur.
Une âme charitable peut être...
Merci d'avance
Unity 2021.3.4.1f
Windows 10
j'en appelle encore a vos conseils d'expert.
J'ai récupéré le code de déplacement suivant :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMouvement : MonoBehaviour
{//Camera
public Camera playerCamera;
//Composant qui permet de faire bouger le joueur
CharacterController characterController;
//Vitesse de marche
public float walkingSpeed = 7.5f;
//Vitesse de course
public float runningSpeed = 15f;
//Vitesse de saut
public float jumpSpeed = 8f;
//Gravité
float gravity = 20f;
//Déplacement
Vector3 moveDirection;
//Marche ou court ?
private bool isRunning = false;
//Rotation de la caméra
float rotationX = 0;
public float rotationSpeed = 2.0f;
public float rotationXLimit = 45.0f;
// Start is called before the first frame update
void Start()
{
//Cache le curseur de la souris
Cursor.visible = false;
characterController = GetComponent<CharacterController>();
}
// 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 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;
}
//Applique le mouvement
characterController.Move(moveDirection * Time.deltaTime);
//Rotation de la caméra
//Input.GetAxis("Mouse Y") = mouvement de la souris haut/bas
//On est en 3D donc applique ("Mouse Y") sur l'axe de rotation X
rotationX += -Input.GetAxis("Mouse Y") * rotationSpeed;
//La rotation haut/bas de la caméra est comprise entre -45 et 45
//Mathf.Clamp permet de limiter une valeur
//On limite rotationX, entre -rotationXLimit et rotationXLimit (-45 et 45)
rotationX = Mathf.Clamp(rotationX, -rotationXLimit, rotationXLimit);
//Applique la rotation haut/bas sur la caméra
playerCamera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
//Input.GetAxis("Mouse X") = mouvement de la souris gauche/droite
//Applique la rotation gauche/droite sur le Player
transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * rotationSpeed, 0);
}
private void OnTriggerEnter(Collider other)
{
if (other.name == "Cube")
{
//moveDirection.y = 30;
moveDirection.z = 1000f;
characterController.Move(moveDirection *Time.deltaTime);
}
}
}
Si j'enlève les // devant le movedirection.y,
Code : Tout sélectionner
private void OnTriggerEnter(Collider other)
{
if (other.name == "Cube")
{
moveDirection.y = 30;
moveDirection.z = 1000f;
characterController.Move(moveDirection *Time.deltaTime);
}
Par contre, en ce qui concerne d'avancer, il avant mais de quelques mètres seulement. Rien a voir avec le saut malgré les 2 valeurs bien différentes.
Le but est que le joueur soir propulsé vers l'avant et un peu en hauteur.
Une âme charitable peut être...
Merci d'avance
Unity 2021.3.4.1f
Windows 10