Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class CameraShake : MonoBehaviour
- {
- public bool shakePosition;
- public bool shakeRotation;
- public float shakeIntensityMin = 0.1f;
- public float shakeIntensityMax = 0.5f;
- public float shakeDecay = 0.02f;
- [HideInInspector]
- public Vector3 OriginalPos;
- [HideInInspector]
- public Quaternion OriginalRot;
- private bool isShakeRunning = false;
- public void Shake()
- {
- OriginalPos = transform.position;
- OriginalRot = transform.rotation;
- if (!isShakeRunning) StartCoroutine(DoShake());
- }
- IEnumerator DoShake()
- {
- isShakeRunning = true;
- float currentShakeIntensity = Random.Range(shakeIntensityMin, shakeIntensityMax);
- while (currentShakeIntensity > 0)
- {
- if (shakePosition)
- {
- transform.position = OriginalPos + Random.insideUnitSphere * currentShakeIntensity;
- }
- if (shakeRotation)
- {
- transform.rotation = new Quaternion(OriginalRot.x + Random.Range(-currentShakeIntensity, currentShakeIntensity) * .2f,
- OriginalRot.y + Random.Range(-currentShakeIntensity, currentShakeIntensity) * .2f,
- OriginalRot.z + Random.Range(-currentShakeIntensity, currentShakeIntensity) * .2f,
- OriginalRot.w + Random.Range(-currentShakeIntensity, currentShakeIntensity) * .2f);
- }
- currentShakeIntensity -= shakeDecay;
- yield return null;
- }
- isShakeRunning = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement