Advertisement
Diamond32_Tutoriales

WeaponsShoot

Jun 4th, 2021
1,117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.78 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public enum shootType
  6. {
  7.     Semi_automatica,
  8.     Automatica,
  9.     Manual
  10. };
  11.  
  12. public class WeaponsShoot : MonoBehaviour
  13. {
  14.     [Header("Configuracion General || Manual || Automatica")]
  15.     public float Daño;
  16.     public float RangoDeDisparo;
  17.     public Camera cam;
  18.     RaycastHit hit;
  19.     public LayerMask MascarasPermitidas;
  20.     public GameObject muzzleFlash;
  21.     public GameObject ImpactFX;
  22.     float siguientetiempodedisparo;
  23.     public shootType TipoDeArma;
  24.     public AudioSource sm;
  25.     public AudioClip SonidoDeDisparo;
  26.  
  27.  
  28.     [Header("Configuracion Semi Automatica")]
  29.  
  30.  
  31.     public int DisparosPosClick;
  32.     public float DañoPorDisparo;
  33.     [Range(0, 1)] public float TiempoDeBala;
  34.  
  35.  
  36.     [Header("Configuracion Automatica")]
  37.  
  38.     [Range(0, 200)] public float FireRate;
  39.     public bool isShooting;
  40.  
  41.     [Header("Configuracion Manual")]
  42.     public float dañoManual;
  43.  
  44.     public PlayerController controller;
  45.  
  46.  
  47.     void Start()
  48.     {
  49.        
  50.     }
  51.  
  52.  
  53.  
  54.     void Update()
  55.     {
  56.         switch (TipoDeArma)
  57.             {
  58.                 case shootType.Automatica:
  59.                     {
  60.                         if (Input.GetKey(KeyCode.Mouse0) && !isShooting)
  61.                         {
  62.                             StartCoroutine(shootgin());
  63.                             isShooting = true;
  64.                     }
  65.                     break;
  66.                     }
  67.  
  68.  
  69.                 case shootType.Semi_automatica:
  70.                     {
  71.                     if (Input.GetKeyDown(KeyCode.Mouse0) && !isShooting)
  72.                     {
  73.                         StartCoroutine(semiAutomatica());
  74.                         isShooting = true;
  75.                     }
  76.                     break;
  77.                     }
  78.  
  79.                 case shootType.Manual:
  80.                     {
  81.                         if (Input.GetKeyDown(KeyCode.Mouse0) && !isShooting)
  82.                         {
  83.                             StartCoroutine(shootgin());
  84.                             isShooting = true;
  85.                     }
  86.                     break;
  87.                     }
  88.         }
  89.     }
  90.  
  91.    IEnumerator semiAutomatica()
  92.     {
  93.         int i;
  94.  
  95.         for ( i = 0; i < DisparosPosClick; i++)
  96.         {
  97.             StartCoroutine(semiAutomaticaShoot());
  98.             yield return new WaitForSeconds (TiempoDeBala);
  99.         }
  100.         isShooting = false;
  101.         i = 0;  
  102.     }
  103.  
  104.  
  105.  
  106.     IEnumerator shootgin()
  107.     {
  108.         yield return new WaitForSeconds(1 / FireRate);
  109.         if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, RangoDeDisparo, MascarasPermitidas))
  110.         {
  111.             if (hit.collider.GetComponent<FollowPlayer>())
  112.             {
  113.                 FollowPlayer fl = hit.collider.GetComponent<FollowPlayer>();
  114.                 fl.lifeRemove(DañoPorDisparo);
  115.             }
  116.             GameObject muzle = Instantiate(ImpactFX, hit.point, Quaternion.LookRotation(hit.normal), null);
  117.             Destroy(muzle, 1f);
  118.         }
  119.  
  120.         sm.PlayOneShot(SonidoDeDisparo, 0.5f);
  121.         isShooting = false;
  122.     }
  123.  
  124.     IEnumerator semiAutomaticaShoot()
  125.     {
  126.         yield return new WaitForSeconds(1 / FireRate);
  127.         if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, RangoDeDisparo, MascarasPermitidas))
  128.         {
  129.  
  130.             if (hit.collider.GetComponent<FollowPlayer>())
  131.             {
  132.                 FollowPlayer fl = hit.collider.GetComponent<FollowPlayer>();
  133.                 fl.lifeRemove(DañoPorDisparo);
  134.             }
  135.             GameObject muzle = Instantiate(ImpactFX, hit.point, Quaternion.LookRotation(hit.normal), null);
  136.             Destroy(muzle, 1f);
  137.         }
  138.         sm.PlayOneShot(SonidoDeDisparo, 0.5f);
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement