41 lines
995 B
C#
41 lines
995 B
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
public class CameraShake : MonoBehaviour
|
|
{
|
|
[SerializeField] private float shakeDuration = 0.2f;
|
|
[SerializeField] private float shakeMagnitude = 0.1f;
|
|
|
|
private Vector3 initialLocalPosition;
|
|
private Coroutine shakeCoroutine;
|
|
|
|
private void Awake()
|
|
{
|
|
initialLocalPosition = transform.localPosition;
|
|
}
|
|
|
|
public void Shake()
|
|
{
|
|
if (shakeCoroutine != null)
|
|
{
|
|
StopCoroutine(shakeCoroutine);
|
|
}
|
|
shakeCoroutine = StartCoroutine(ShakeRoutine());
|
|
}
|
|
|
|
private IEnumerator ShakeRoutine()
|
|
{
|
|
float elapsed = 0f;
|
|
|
|
while (elapsed < shakeDuration)
|
|
{
|
|
Vector3 randomPoint = Random.insideUnitSphere * shakeMagnitude;
|
|
transform.localPosition = initialLocalPosition + randomPoint;
|
|
|
|
elapsed += Time.deltaTime;
|
|
yield return null;
|
|
}
|
|
|
|
transform.localPosition = initialLocalPosition;
|
|
}
|
|
} |