Advertisement
Guest User

30 Dias de Mecanica, dia 4 - Jonas

a guest
Jul 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 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