Skip to content

Instantly share code, notes, and snippets.

@insominx
Created May 16, 2013 23:02
Show Gist options
  • Save insominx/5595782 to your computer and use it in GitHub Desktop.
Save insominx/5595782 to your computer and use it in GitHub Desktop.
Unity3D Camera Shake using random.
using UnityEngine;
using System.Collections;
public class RandomShake : MonoBehaviour {
public float duration = 0.5f;
public float magnitude = 0.1f;
public bool test = false;
// -------------------------------------------------------------------------
public void PlayShake() {
StopAllCoroutines();
StartCoroutine("Shake");
}
// -------------------------------------------------------------------------
void Update() {
if (test) {
test = false;
}
}
// -------------------------------------------------------------------------
IEnumerator Shake() {
float elapsed = 0.0f;
Vector3 originalCamPos = Camera.main.transform.position;
while (elapsed < duration) {
elapsed += Time.deltaTime;
float percentComplete = elapsed / duration;
float damper = 1.0f - Mathf.Clamp(4.0f * percentComplete - 3.0f, 0.0f, 1.0f);
// map noise to [-1, 1]
float x = Random.value * 2.0f - 1.0f;
float y = Random.value * 2.0f - 1.0f;
x *= magnitude * damper;
y *= magnitude * damper;
Camera.main.transform.position = new Vector3(x, y, originalCamPos.z);
yield return null;
}
Camera.main.transform.position = originalCamPos;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment