Advertisement
Guest User

PlayerMovements

a guest
Jan 30th, 2013
1,332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.20 KB | None | 0 0
  1. using UnityEngine;
  2. /*
  3.  * 2D / 2.5D Plateformer player movement manager
  4.  * GUENDELI OMAR
  5.  * Ce script permet de gerer les deplacements d'un personnage de plateformer basique: course et saut
  6.  * nul besoin de Rigidbody ou gravity, il suffiit juste d'un CharacterController Component
  7. */
  8. using System.Collections;
  9.  
  10. public enum PlayerState { idle, running, jumping, dead }; // des etats de notre personnage, semblane a une Final State Machine
  11. public class PlayerMovements : MonoBehaviour
  12. {
  13.     public static PlayerState playerState;
  14.     public float speed;         // La vitesse de deplacement de notre personnage
  15.     public float jumpForce;     // la force de saut
  16.     public float gravityForce;  // l'impact de la gravité (attention: s'inverse lors du saut
  17.     public float airDamping;    // la resistance de l'air qui s'applique sur notre perso lors du saut (entre 0 et 1)
  18.     public CharacterController controller;
  19.     //the direction we are going to move
  20.     private Vector3 dir;
  21.  
  22.     void Start()
  23.     {
  24.         // charge la reference de notre CharacterController
  25.         controller = GetComponent<CharacterController>();
  26.     }
  27.  
  28.     void Update()
  29.     {
  30.  
  31.     }
  32.     void FixedUpdate()
  33.     {
  34.         StateCheck(); // check plus bas :3
  35.         // Est ce que notre joueur appuie sur gauche ou droite
  36.         dir = new Vector3(Input.GetAxis("Horizontal"), 0, 0);
  37.  
  38.         // on transfers la direction "Localement"
  39.         dir = transform.TransformDirection(dir) * speed;
  40.             // Ici on va flipper son personnage selon s'il bouge a gauche ou droite
  41.         if (dir.x > 0) { transform.localScale = new Vector3(1, 1, 1); }
  42.         if (dir.x < 0) { transform.localScale = new Vector3(-1, 1, 1); }
  43.         // on applique notre propre gravité
  44.         dir.y = controller.velocity.y - gravityForce * Time.deltaTime;
  45.  
  46.         // Est on en train de sauter
  47.         if (Input.GetKey("space") && controller.isGrounded) // on ne saute que si on est au sol, pour eviter des sauts multiples
  48.         {
  49.             dir.y = jumpForce * gravityForce * Time.deltaTime; // remarquez que la gravité est appliquée positivement !!
  50.         }
  51.         if (!controller.isGrounded)
  52.         {
  53.             dir.x *= airDamping; // on applique une resistance de l'air, pour diminuer les mouvement lateraux lors du saut
  54.         }
  55.  
  56.         // et Hop au final on applique le mouvement au personnage
  57.         controller.Move(dir * Time.deltaTime);
  58.     }
  59.  
  60.     void StateCheck() // une espece de StateMachine pour notre perso, surtout pour les animations (check PlayerAnimations.cs)
  61.     {
  62.         if (controller.isGrounded && (controller.velocity.x <= 1.2 || controller.velocity.x >= -1.2))
  63.         {
  64.             playerState = PlayerState.idle; // le perso ne bouge pas, et est au sol. donc il est en IDLE
  65.         }
  66.         if (controller.isGrounded && (controller.velocity.x > 1.2 || controller.velocity.x < -1.2))
  67.         {
  68.             playerState = PlayerState.running; // le perso est au sol, et bouge, donc il est en train de courir
  69.         }
  70.         if (!controller.isGrounded)
  71.         {
  72.             playerState = PlayerState.jumping; // le perso n'est pas au sol, donc il est en phase de saut/chute libre
  73.         }      
  74.     }
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement