Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- /*
- * 2D / 2.5D Plateformer player movement manager
- * GUENDELI OMAR
- * Ce script permet de gerer les deplacements d'un personnage de plateformer basique: course et saut
- * nul besoin de Rigidbody ou gravity, il suffiit juste d'un CharacterController Component
- */
- using System.Collections;
- public enum PlayerState { idle, running, jumping, dead }; // des etats de notre personnage, semblane a une Final State Machine
- public class PlayerMovements : MonoBehaviour
- {
- public static PlayerState playerState;
- public float speed; // La vitesse de deplacement de notre personnage
- public float jumpForce; // la force de saut
- public float gravityForce; // l'impact de la gravité (attention: s'inverse lors du saut
- public float airDamping; // la resistance de l'air qui s'applique sur notre perso lors du saut (entre 0 et 1)
- public CharacterController controller;
- //the direction we are going to move
- private Vector3 dir;
- void Start()
- {
- // charge la reference de notre CharacterController
- controller = GetComponent<CharacterController>();
- }
- void Update()
- {
- }
- void FixedUpdate()
- {
- StateCheck(); // check plus bas :3
- // Est ce que notre joueur appuie sur gauche ou droite
- dir = new Vector3(Input.GetAxis("Horizontal"), 0, 0);
- // on transfers la direction "Localement"
- dir = transform.TransformDirection(dir) * speed;
- // Ici on va flipper son personnage selon s'il bouge a gauche ou droite
- if (dir.x > 0) { transform.localScale = new Vector3(1, 1, 1); }
- if (dir.x < 0) { transform.localScale = new Vector3(-1, 1, 1); }
- // on applique notre propre gravité
- dir.y = controller.velocity.y - gravityForce * Time.deltaTime;
- // Est on en train de sauter
- if (Input.GetKey("space") && controller.isGrounded) // on ne saute que si on est au sol, pour eviter des sauts multiples
- {
- dir.y = jumpForce * gravityForce * Time.deltaTime; // remarquez que la gravité est appliquée positivement !!
- }
- if (!controller.isGrounded)
- {
- dir.x *= airDamping; // on applique une resistance de l'air, pour diminuer les mouvement lateraux lors du saut
- }
- // et Hop au final on applique le mouvement au personnage
- controller.Move(dir * Time.deltaTime);
- }
- void StateCheck() // une espece de StateMachine pour notre perso, surtout pour les animations (check PlayerAnimations.cs)
- {
- if (controller.isGrounded && (controller.velocity.x <= 1.2 || controller.velocity.x >= -1.2))
- {
- playerState = PlayerState.idle; // le perso ne bouge pas, et est au sol. donc il est en IDLE
- }
- if (controller.isGrounded && (controller.velocity.x > 1.2 || controller.velocity.x < -1.2))
- {
- playerState = PlayerState.running; // le perso est au sol, et bouge, donc il est en train de courir
- }
- if (!controller.isGrounded)
- {
- playerState = PlayerState.jumping; // le perso n'est pas au sol, donc il est en phase de saut/chute libre
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement