Advertisement
SvOzMaS

Recoiler

Oct 28th, 2018
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.38 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3.  
  4. /// <summary>
  5. ///  Original Script from: https://forum.unity.com/threads/simple-weapon-recoil-script.70271/
  6. /// </summary>
  7.  
  8.  
  9. public class Recoiler : MonoBehaviour {
  10.  
  11.     [System.Serializable]
  12.     public struct RecoilData {
  13.         public float maxRecoil_x;
  14.         public float maxRecoil_y;
  15.  
  16.         public float maxTrans_x;
  17.         public float maxTrans_z;
  18.  
  19.         public float recoilSpeed;
  20.  
  21.         public RecoilData(float maxRecoil_x, float maxRecoil_y, float maxTrans_x, float maxTrans_z, float recoilSpeed) {
  22.           this.maxRecoil_x = maxRecoil_x;
  23.           this.maxRecoil_y = maxRecoil_y;
  24.  
  25.           this.maxTrans_x = maxTrans_x;
  26.           this.maxTrans_z = maxTrans_z;
  27.  
  28.           this.recoilSpeed = recoilSpeed;
  29.  
  30.         }
  31.     }
  32.  
  33.     public RecoilData recoilData = new RecoilData(-20.0f, -10.0f, 1.0f, -1.0f, 10.0f);
  34.     public float recoil { get; set; }
  35.  
  36.     private Vector3 smoother;
  37.  
  38.     void Update() {
  39.         if (recoil > 0) {
  40.             var maxRecoil = Quaternion.Euler(
  41.                 Random.Range(transform.localRotation.x, recoilData.maxRecoil_x),
  42.                 Random.Range(transform.localRotation.y, recoilData.maxRecoil_y),
  43.                 transform.localRotation.z);
  44.  
  45.             // Dampen towards the target rotation
  46.             transform.localRotation = Quaternion.Slerp(transform.localRotation, maxRecoil, Time.deltaTime * recoilData.recoilSpeed);
  47.  
  48.             var maxTranslation = new Vector3(
  49.                 Random.Range(transform.localPosition.x, recoilData.maxTrans_x),
  50.                 transform.localPosition.y,
  51.                 Random.Range(transform.localPosition.z, recoilData.maxTrans_z));
  52.  
  53.             //transform.localPosition = Vector3.SLerp(transform.localPosition, maxTranslation, Time.deltaTime * recoilSpeed);
  54.             transform.localPosition = Vector3.SmoothDamp(transform.localPosition, maxTranslation, ref smoother, Time.deltaTime * recoilData.recoilSpeed);
  55.  
  56.             recoil -= Time.deltaTime;
  57.         }
  58.         else {
  59.             recoil = 0;
  60.  
  61.             var minRecoil = Quaternion.Euler(
  62.                 Random.Range(0, transform.localRotation.x),
  63.                 Random.Range(0, transform.localRotation.y),
  64.                 transform.localRotation.z);
  65.  
  66.             // Dampen towards the target rotation
  67.             transform.localRotation = Quaternion.Slerp(transform.localRotation, minRecoil, Time.deltaTime * recoilData.recoilSpeed / 2);
  68.  
  69.             var minTranslation = new Vector3(
  70.                 Random.Range(0, transform.localPosition.x),
  71.                 transform.localPosition.y,
  72.                 Random.Range(0, transform.localPosition.z));
  73.  
  74.             //transform.localPosition = Vector3.SLerp(transform.localPosition, minTranslation, Time.deltaTime * recoilSpeed);
  75.             transform.localPosition = Vector3.SmoothDamp(transform.localPosition, minTranslation, ref smoother, recoilData.recoilSpeed * Time.deltaTime);
  76.         }
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement