rj1twitch

PlatformerTutorial2.cs

Apr 6th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.66 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5.  
  6. /*
  7. Written for my 2d platformer tutorial here:
  8. https://rookj.blogspot.com/2020/04/tutorial-how-to-make-2d-platformer-in_6.html
  9. */
  10.  
  11.  
  12.  
  13. public class PlatformerTutorial2 : MonoBehaviour
  14. {
  15.  
  16.  
  17. public PlayerPhase currentPlayerPhase;
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. const string movingFloatName = "Moving";
  25. const string jumpBoolName = "Jump";
  26.  
  27. const float movementSpeed = 5f, jumpPower = 7f,
  28. groundedGravityScale = 5f, fallingGravityScale = 5f,
  29. jumpGravityScale = 1f;
  30.  
  31. public LayerMask groundedLayerMask;
  32.  
  33. Vector2 groundOverlapArea;
  34. float groundOffset;
  35.  
  36. //components
  37. public Rigidbody2D playerRig;
  38. public Animator playerAnimator;
  39. public SpriteRenderer playerSpriteRenderer;
  40. public CapsuleCollider2D playerCapsuleCollider2D;
  41.  
  42.  
  43. bool leftGround;
  44. // Start is called before the first frame update
  45. void Start()
  46. {
  47. playerRig = gameObject.GetComponent<Rigidbody2D>();
  48. playerAnimator = gameObject.GetComponent<Animator>();
  49. playerSpriteRenderer = gameObject.GetComponent<SpriteRenderer>();
  50. playerCapsuleCollider2D = gameObject.GetComponent<CapsuleCollider2D>();
  51.  
  52.  
  53.  
  54. groundOverlapArea = new Vector2((
  55. playerCapsuleCollider2D.size.x / 2f) * .9f, .3f);
  56. groundOffset = playerCapsuleCollider2D.offset.y -
  57. playerCapsuleCollider2D.size.y / 2f;
  58. }
  59.  
  60. // Update is called once per frame
  61. void Update()
  62. {
  63.  
  64. //float x = Input.GetAxis("Horizontal");
  65. float x = Input.GetAxisRaw("Horizontal");
  66.  
  67. playerRig.velocity = new Vector2(movementSpeed * x,
  68. playerRig.velocity.y);
  69.  
  70.  
  71.  
  72. if (currentPlayerPhase == PlayerPhase.IDLE)
  73. {
  74. if (x < 0)
  75. {
  76. playerAnimator.SetFloat(movingFloatName, 1f);
  77. playerSpriteRenderer.flipX = true;
  78. playerAnimator.speed = 1f;
  79. }
  80. else if (x > 0)
  81. {
  82. playerAnimator.SetFloat(movingFloatName, 1f);
  83. playerSpriteRenderer.flipX = false;
  84. playerAnimator.speed = 1f;
  85. }
  86. else
  87. {
  88.  
  89. playerAnimator.SetFloat(movingFloatName, 0f);
  90. playerAnimator.speed = .5f;
  91. }
  92.  
  93.  
  94.  
  95.  
  96.  
  97. if (IsGrounded())
  98. {
  99. playerRig.gravityScale = groundedGravityScale;
  100.  
  101. leftGround = false;
  102.  
  103.  
  104. if (Input.GetKeyDown(KeyCode.Space))
  105. {
  106. Jump();
  107. }
  108.  
  109.  
  110.  
  111.  
  112. }
  113.  
  114.  
  115.  
  116.  
  117. }
  118. else if (currentPlayerPhase == PlayerPhase.JUMP)
  119. {
  120. if (x < 0)
  121. {
  122.  
  123.  
  124. playerSpriteRenderer.flipX = true;
  125.  
  126. }
  127. else if (x > 0)
  128. {
  129.  
  130.  
  131. playerSpriteRenderer.flipX = false;
  132.  
  133. }
  134.  
  135.  
  136.  
  137. if (IsGrounded())
  138. {
  139. if (playerRig.velocity.y <= 0)
  140. {
  141. playerAnimator.SetBool(jumpBoolName, false);
  142. currentPlayerPhase = PlayerPhase.IDLE;
  143. playerRig.gravityScale = groundedGravityScale;
  144. }
  145. else if (leftGround)
  146. {
  147. playerRig.gravityScale = groundedGravityScale;
  148. }
  149.  
  150.  
  151.  
  152.  
  153. }
  154. else if (playerRig.velocity.y <= 0)
  155. {
  156.  
  157. playerRig.gravityScale = fallingGravityScale;
  158. }
  159. else
  160. {
  161. leftGround = true;
  162.  
  163. }
  164.  
  165.  
  166.  
  167. }
  168.  
  169.  
  170.  
  171. }
  172.  
  173. bool IsGrounded()
  174. {
  175. Vector2 a = new Vector2(
  176. transform.position.x - groundOverlapArea.x,
  177. transform.position.y + groundOffset);
  178. Vector2 b = new Vector2(
  179. transform.position.x + groundOverlapArea.x,
  180. transform.position.y + groundOffset -
  181. groundOverlapArea.y);
  182.  
  183.  
  184.  
  185. return (Physics2D.OverlapArea(a, b, groundedLayerMask));
  186. }
  187.  
  188.  
  189.  
  190.  
  191. void Jump()
  192. {
  193.  
  194.  
  195.  
  196.  
  197. playerRig.gravityScale = jumpGravityScale;
  198.  
  199. playerRig.velocity = new Vector2(playerRig.velocity.x,
  200. jumpPower);
  201.  
  202.  
  203. currentPlayerPhase = PlayerPhase.JUMP;
  204.  
  205. playerAnimator.SetBool(jumpBoolName, true);
  206. playerAnimator.speed = 1f;
  207. }
  208.  
  209.  
  210. }
  211.  
  212. public enum PlayerPhase
  213. {
  214. IDLE, JUMP
  215. }
Add Comment
Please, Sign In to add comment