Edwarddv

CameraShaker

Oct 7th, 2019
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.42 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class CameraShaker : MonoBehaviour
  4. {
  5.  
  6.     Vector3 cameraShake;
  7.     float currentShakeMagnitude = 0f;
  8.     public float shakeReductionSpeed = 1f;
  9.     public float maximumShakeMagnitude = 5f;
  10.  
  11.     public float shakeScalar = 2f;
  12.  
  13.  
  14.  
  15.     public float maxDistanceForCameraShake = 40f;
  16.     public void AddCameraShake(float magnitude, Vector3 shakePosition)
  17.     {
  18.  
  19.         float distanceToCamera = Vector3.Distance(shakePosition, transform.position);
  20.         if (distanceToCamera > maxDistanceForCameraShake)
  21.             return;
  22.  
  23.         float fallOff = 1f - (distanceToCamera / maxDistanceForCameraShake);
  24.  
  25.         magnitude *= fallOff;
  26.  
  27.         if (magnitude < maximumShakeMagnitude)
  28.         {
  29.             currentShakeMagnitude = magnitude;
  30.         }
  31.         else
  32.         {
  33.             currentShakeMagnitude = maximumShakeMagnitude;
  34.         }
  35.  
  36.     }
  37.  
  38.     void LateUpdate()
  39.     {
  40.         if(currentShakeMagnitude > 0f)
  41.             Shake();
  42.     }
  43.  
  44.     private void Shake()
  45.     {
  46.         Vector3 startPosition = transform.position - cameraShake;
  47.         if (currentShakeMagnitude > 0f)
  48.         {
  49.             currentShakeMagnitude -= Time.deltaTime * shakeReductionSpeed;
  50.         }
  51.         else currentShakeMagnitude = 0;
  52.  
  53.         cameraShake = Random.insideUnitSphere * currentShakeMagnitude * shakeScalar;
  54.  
  55.         transform.position = startPosition + cameraShake;
  56.  
  57.     }
  58.  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment