Cryorus

Player Controller V2

Sep 21st, 2020
1,234
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using JetBrains.Annotations;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Runtime.InteropServices;
  6. using UnityEngine;
  7. using UnityEngine.Rendering.LWRP;
  8. using UnityEngine.Experimental.Rendering.Universal;
  9. using UnityEditor.Experimental.GraphView;
  10.  
  11. public class PlayerController : MonoBehaviour
  12. {
  13.     Rigidbody2D rigid;
  14.     Animator animator; //con esto adhiero el Animator de Unity
  15.  
  16.     bool isDead;
  17.     float moveHorizontal; //global para poder usarla en Update y FixedUpdate
  18.     public float moveSpeed = 2f;
  19.     public float jumpForce = 8f;
  20.     public float maxJump = 2;
  21.     public float jumpCount;
  22.  
  23.     bool isFalling;
  24.     bool isJumping;
  25.  
  26.     public Transform groundCheck;
  27.     public float checkRadius = 0.1f;
  28.     public LayerMask whatIsGround;
  29.     bool isGrounded; //confirma si estoy chocando con Ground
  30.  
  31.     int direction;
  32.     bool isDashing;
  33.     float dashTime;
  34.     public float dashSpeed = 10f;
  35.     public float maxDashTime;
  36.  
  37.     void Start()
  38.     {
  39.         animator = GetComponent<Animator>(); //invoca al Aniimator
  40.         rigid = GetComponent<Rigidbody2D>();
  41.         dashTime = maxDashTime;
  42.     }
  43.  
  44.     //Detecta si estoy tocando collider con Tag Ground
  45.     //Requiere un collider con Trigger
  46.     private void OnTriggerEnter2D(Collider2D collision)
  47.     {
  48.         if (collision.CompareTag("Cave"))
  49.         {
  50.             GetComponent<Light2D>().enabled = true;
  51.         } else if (collision.CompareTag("Death"))
  52.         {
  53.             //desabilitar mas colliders para componente "Death".. si no choca mas veces
  54.             isDead = true;
  55.             rigid.AddForce(new Vector2(-transform.localScale.x, 3f), ForceMode2D.Impulse);
  56.             animator.SetBool("isDead", true);
  57.            
  58.         }
  59.     }
  60.     //Inverso
  61.     private void OnTriggerExit2D(Collider2D collision)
  62.     {
  63.         if (collision.CompareTag("Ground"))
  64.         {
  65.             isGrounded = false;
  66.             Falling();
  67.         }
  68.         else if (collision.CompareTag("Cave"))
  69.         {
  70.             GetComponent<Light2D>().enabled = false;
  71.         }
  72.     }
  73.  
  74.     private void Dead()
  75.     {
  76.         Destroy(this.gameObject);
  77.     }
  78.  
  79.     //Invierte el eje X del sprite segun la dirección del movimiento
  80.     private void Flip(float movement)
  81.     {
  82.         if (movement > 0f)
  83.         {
  84.             transform.localScale = new Vector3(1f, 1f, 1f);
  85.         }
  86.         else if (movement < 0f)
  87.         {
  88.             transform.localScale = new Vector3(-1f, 1f, 1f);
  89.         }
  90.     }
  91.  
  92.     //movimiento horizontal del personaje
  93.     private void horizontalMovement(float move)
  94.     {
  95.         Vector3 movement;
  96.         //no se mueve si la velocidad no es distinta a 0
  97.         if (move != 0f)
  98.         {
  99.             movement = new Vector3(move, 0, 0);
  100.             //transform.position += movement * moveSpeed * Time.deltaTime;
  101.             transform.Translate(movement * moveSpeed * Time.deltaTime);
  102.  
  103.             //si la velocidad absoluta es mayor a 0
  104.             if (Mathf.Abs(move) > 0f)
  105.             {
  106.                 animator.SetFloat("speed", 1); //para animator
  107.             }
  108.  
  109.             Flip(move); //mueve el eje x segun corresponda
  110.         }
  111.         else
  112.         {
  113.             animator.SetFloat("speed", 0); //si el movimiento es igual a cero, para animator
  114.         }
  115.     }
  116.  
  117.     //Jumping, solo se activa si se presiona la tecla
  118.     private void Jump(bool isJumping)
  119.     {
  120.         if(isJumping && jumpCount > 0)
  121.         {
  122.             //rigid.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
  123.  
  124.             if (isFalling)
  125.             {
  126.                 jumpCount = 1;
  127.                 isFalling = false;
  128.                 animator.SetBool("isFalling", false);
  129.             }
  130.  
  131.             if (jumpCount == maxJump)
  132.             {
  133.                 rigid.velocity = Vector2.up * jumpForce;
  134.                 animator.SetBool("jumping", true); //para el animator
  135.             } else if(jumpCount < maxJump)
  136.             {
  137.                 rigid.velocity = Vector2.up * jumpForce/1.2f;
  138.                 animator.SetBool("jumping", false);
  139.                 animator.SetBool("doubleJumping", true);
  140.             }
  141.  
  142.             jumpCount -= 1;
  143.         }
  144.     }
  145.  
  146.     private void groundedCheck()
  147.     {
  148.         if(rigid.velocity.y == 0)
  149.         {
  150.             isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);
  151.             animator.SetBool("jumping", false);
  152.             animator.SetBool("isFalling", false);
  153.             animator.SetBool("doubleJumping", false);
  154.             isFalling = false;
  155.             jumpCount = maxJump;
  156.         }
  157.     }
  158.  
  159.     private void Falling()
  160.     {
  161.         if(rigid.velocity.y < 0 && !isJumping)
  162.         {
  163.             animator.SetBool("isFalling", true);
  164.             isFalling = true;
  165.         }
  166.     }
  167.  
  168.     private void Dash(bool dashing)
  169.     {
  170.         if (dashing)
  171.         {
  172.             if (dashTime <= 0)
  173.             {
  174.                 dashTime = maxDashTime;
  175.                 rigid.velocity = Vector2.zero;
  176.                 isDashing = false;
  177.             } else
  178.             {
  179.                 Debug.Log("dashing " + dashTime);
  180.                 dashTime -= Time.deltaTime;
  181.                 rigid.velocity = new Vector2(transform.localScale.x, transform.localPosition.y) * dashSpeed;
  182.             }
  183.         }
  184.     }
  185.  
  186.     // Update is called once per frame
  187.     void Update()
  188.     {
  189.         //Debug.Log(GetComponent<Rigidbody2D>().velocity.y);
  190.         moveHorizontal = Input.GetAxis("Horizontal"); //detecta si se esta moviendo el eje horizontal
  191.         isJumping = (Input.GetButtonDown("Jump") && !isDead) ? true : false; //detecta si se presionó Jump
  192.         Jump(isJumping);
  193.         groundedCheck();
  194.  
  195.         if(direction == 0)
  196.         {
  197.             if (Input.GetKeyDown(KeyCode.LeftShift))
  198.             {
  199.                 if (moveHorizontal < 0)
  200.                 {
  201.                     direction = 1;
  202.                 } else
  203.                 {
  204.                     direction = 2;
  205.                 }
  206.             }
  207.         } else
  208.         {
  209.             if (dashTime <= 0)
  210.             {
  211.                 direction = 0;
  212.                 dashTime = maxDashTime;
  213.                 animator.SetBool("isDashing", false);
  214.                 //cambiar por porcentaje de desacelereacion configurable
  215.                 rigid.velocity = new Vector2(transform.localScale.x * 2f, 0);
  216.             } else
  217.             {
  218.                 Debug.Log("dashing: " + dashTime);
  219.                 animator.SetBool("isDashing", true);
  220.                 dashTime -= Time.deltaTime;
  221.  
  222.                 if(direction == 1)
  223.                 {
  224.                     rigid.velocity = Vector2.left * dashSpeed;
  225.                     //rigid.AddForce(new Vector2(transform.localScale.x, 0f * dashSpeed), ForceMode2D.Impulse);
  226.                 } else if (direction == 2)
  227.                 {
  228.                     //rigid.AddForce(new Vector2(transform.localScale.x, 0f * dashSpeed), ForceMode2D.Impulse);
  229.                     rigid.velocity = Vector2.right * dashSpeed;
  230.                 }
  231.             }
  232.         }
  233.     }
  234.  
  235.     void FixedUpdate()
  236.     {
  237.         if (!isDead)
  238.         {
  239.             horizontalMovement(moveHorizontal);
  240.         }
  241.  
  242.     }
  243. }
  244.  
RAW Paste Data