Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class CameraShake : MonoBehaviour {
- public float speed = 1f;
- public float minAmplitude = 0.1f;
- public float maxAmplitude = 1.0f;
- public float minDelay = 0.01f;
- public float maxDelay = 0.1f;
- public int minShakes = 10;
- public int maxShakes = 20;
- Vector2 currentFocus;
- List<ShakeParams> shakes;
- //public bool shaking;
- static CameraShake _instance;
- // Use this for initialization
- void Awake() {
- _instance = this;
- }
- //IEnumerator Start()
- //{
- // // example usage
- // CameraShake.GenerateShakes();
- // yield return new WaitForSeconds(5f);
- // CameraShake.Shake();
- //}
- void Reset()
- {
- speed = 1f;
- minAmplitude = 0.1f;
- maxAmplitude = 1.0f;
- minDelay = 0.01f;
- maxDelay = 0.1f;
- minShakes = 10;
- maxShakes = 20;
- }
- // Update is called once per frame
- void Update() {
- transform.localPosition = Vector3.Lerp(transform.localPosition, currentFocus, Time.deltaTime * speed);
- }
- public static void GenerateShakes()
- {
- _instance.DoGenerateShakes();
- }
- void DoGenerateShakes()
- {
- shakes = new List<ShakeParams>();
- var total = Random.Range(minShakes, maxShakes);
- for (int i = 0; i < total; i++)
- {
- shakes.Add(new ShakeParams() {
- amplitude = Random.Range(minAmplitude, maxAmplitude),
- timeToMove = Random.Range(minDelay, maxDelay)
- });
- }
- }
- public static void Shake()
- {
- if (_instance.shake != null)
- {
- _instance.StopCoroutine(_instance.shake);
- }
- _instance.shake = _instance.DoShake();
- _instance.StartCoroutine(_instance.shake);
- }
- IEnumerator shake;
- IEnumerator DoShake()
- {
- //shaking = true;
- foreach (var shake in shakes)
- {
- currentFocus = Random.insideUnitCircle * shake.amplitude;
- yield return new WaitForSeconds(shake.timeToMove);
- }
- //shaking = false;
- currentFocus = new Vector2();
- }
- [System.Serializable]
- public struct ShakeParams
- {
- public float amplitude;
- public float timeToMove;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement