float elapsed = 0f; while (elapsed < shakeDuration) Vector3 randomOffset = Random.insideUnitSphere * shakeMagnitude; transform.localPosition = originalPos + randomOffset;

elapsed += Time.deltaTime; yield return null; transform.localPosition = originalPos; transform.localRotation = originalRot;

Vector3 randomRot = Random.insideUnitSphere * shakeMagnitude; transform.localRotation = originalRot * Quaternion.Euler(randomRot);

originalPos = transform.localPosition; originalRot = transform.localRotation;

shakeDuration = duration; shakeMagnitude = magnitude; StartCoroutine(DoShake());

IEnumerator DoShake()

uni.camera shake