Advertisement
Guest User

30 dias de mecânica, dia 4 - Jonas

a guest
Jul 19th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.38 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class MovementScript : MonoBehaviour {
  6.  
  7.     [Header("General Components")]
  8.     public Rigidbody2D rb;
  9.  
  10.     [Header("Walk Config")]
  11.     [SerializeField]
  12.     float walkSpeed;
  13.     [SerializeField] float maxWalkSpeed;
  14.     [Tooltip("Standard value = 10")] [SerializeField] float slowDownAmount = 10;
  15.  
  16.     [Header("Jump configs")]
  17.     [SerializeField]
  18.     float jumpForce;
  19.     [SerializeField] float jumpTimeCounter;
  20.     float jumpTimeCounterOriginal;
  21.  
  22.     [Header("Ground check config")]
  23.     [SerializeField] bool isGrounded = true;
  24.     [SerializeField] private Transform groundCheck;
  25.     [SerializeField] private float groundCheckRadius;
  26.     [SerializeField] private LayerMask whatIsGround;
  27.  
  28.     [Header("Double Jump Config")]
  29.     [SerializeField] private bool canDoubleJump = true;
  30.     [SerializeField] private float doubleJumpForce = 50f;
  31.  
  32.     [Header("Run Config")]
  33.     [SerializeField] float runSpeed;
  34.     [SerializeField] float maxRunSpeed;
  35.  
  36.     private void Start()
  37.     {
  38.         rb = GetComponent<Rigidbody2D>();
  39.         jumpTimeCounterOriginal = jumpTimeCounter;
  40.     }
  41.  
  42.     private void Update()
  43.     {
  44.         if (Input.GetKey(KeyCode.LeftShift)) // Se eu estiver pressionando Shift...
  45.         {
  46.             Run(); // Método para correr
  47.         } else
  48.         {
  49.             Walk(); // Método para andar
  50.         }
  51.  
  52.         Jump(); // Método para pular
  53.         CheckIfIsGrounded(); // Método para checar se o jogador está no chão
  54.         DoubleJump(); // Método para gerenciar pulo duplo
  55.         Flip(); // Método para virar o personagem, se necessário
  56.     }
  57.  
  58.     void Walk()
  59.     {
  60.         if (Input.GetKey(KeyCode.D)) // andar para esquerda
  61.         {
  62.             rb.AddForce(new Vector2(walkSpeed, 0f), ForceMode2D.Force);
  63.         }
  64.  
  65.         if (Input.GetKey(KeyCode.A)) // Andar para direita
  66.         {
  67.             rb.AddForce(new Vector2(-walkSpeed, 0f), ForceMode2D.Force);
  68.         }
  69.  
  70.         if (rb.velocity.x > maxWalkSpeed) // Se o jogador passar da velocidade máxima, diminui ela gradativamente até seu limite
  71.         {
  72.             rb.velocity = new Vector2(rb.velocity.x - (slowDownAmount * Time.deltaTime), rb.velocity.y);
  73.         }
  74.         else if (rb.velocity.x < -maxWalkSpeed) // Se o jogador passar da velocidade máxima, diminui ela gradativamente até seu limite
  75.         {
  76.             rb.velocity = new Vector2(rb.velocity.x + (slowDownAmount * Time.deltaTime), rb.velocity.y);
  77.         }
  78.     }
  79.  
  80.     void Jump()
  81.     {
  82.         if (Input.GetKey(KeyCode.Space) && isGrounded) // Se estou no chão e aperto a tecla de pulo...
  83.         {
  84.             rb.velocity = new Vector2(rb.velocity.x, jumpForce);
  85.         }
  86.  
  87.         if (Input.GetKey(KeyCode.Space) && !isGrounded) // Se segurar o botão de pulo, pula mais alto
  88.         {
  89.             if (jumpTimeCounter > 0)
  90.             {
  91.                 rb.velocity = new Vector2(rb.velocity.x, jumpForce);
  92.                 jumpTimeCounter -= Time.deltaTime;
  93.             }
  94.         }
  95.  
  96.         if (Input.GetKeyUp(KeyCode.Space)) // Quando eu soltar a tecla espaço, meu timer é zerado (para evitar que o player volte a pular depois de dar o segundo pulo)
  97.         {
  98.             jumpTimeCounter = 0f;
  99.         }
  100.     }
  101.  
  102.     void CheckIfIsGrounded() // Checa se estamos no chão por meio de um OverlapCircle
  103.     {
  104.         isGrounded = Physics2D.OverlapCircle(groundCheck.transform.position, groundCheckRadius, whatIsGround);
  105.         if (isGrounded)
  106.         {
  107.             jumpTimeCounter = jumpTimeCounterOriginal;
  108.             canDoubleJump = true;
  109.         }
  110.     }
  111.  
  112.     void DoubleJump()
  113.     {
  114.         if (Input.GetKeyDown(KeyCode.Space) && !isGrounded) // Se eu não estiver no chão e tentar pular...
  115.         {
  116.             if (jumpTimeCounter <= 0 && canDoubleJump)
  117.             {
  118.                 rb.velocity = new Vector2(rb.velocity.x, doubleJumpForce);
  119.                 canDoubleJump = false;
  120.             }
  121.         }
  122.     }
  123.  
  124.     void Run() // Método para correr. Mesma lógica do método para andar, só que será executado quando pressionado shift (faço esta checagem no método Update)
  125.     {
  126.  
  127.         if (Input.GetKey(KeyCode.D))
  128.         {
  129.             rb.AddForce(new Vector2(runSpeed, 0f), ForceMode2D.Force);
  130.         }
  131.  
  132.         if (Input.GetKey(KeyCode.A))
  133.         {
  134.             rb.AddForce(new Vector2(-runSpeed, 0f), ForceMode2D.Force);
  135.         }
  136.  
  137.  
  138.         // Diferente do método de andar, porém, não diminuo a velocidade gradativamente. Travo ela a um valor.
  139.         if (rb.velocity.x > maxRunSpeed)
  140.         {
  141.             rb.velocity = new Vector2(maxRunSpeed, rb.velocity.y);
  142.         }
  143.         else if (rb.velocity.x < -maxRunSpeed)
  144.         {
  145.             rb.velocity = new Vector2(-maxRunSpeed, rb.velocity.y);
  146.         }
  147.     }
  148.  
  149.  
  150.     void Flip() // Aqui apenas verifico para qual direção o personagem está caminhando e multiplico sua escala por -1 se necessário
  151.     {
  152.         if (Input.GetKeyDown(KeyCode.A) && transform.localScale.x > 0)
  153.         {
  154.             transform.localScale = (new Vector2(transform.localScale.x * -1, transform.localScale.y));
  155.         }
  156.  
  157.         if (Input.GetKeyDown(KeyCode.D) && transform.localScale.x < 0)
  158.         {
  159.             transform.localScale = (new Vector2(transform.localScale.x * -1, transform.localScale.y));
  160.         }
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement