Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class CameraShaker : MonoBehaviour
- {
- Vector3 cameraShake;
- float currentShakeMagnitude = 0f;
- public float shakeReductionSpeed = 1f;
- public float maximumShakeMagnitude = 5f;
- public float shakeScalar = 2f;
- public float maxDistanceForCameraShake = 40f;
- public void AddCameraShake(float magnitude, Vector3 shakePosition)
- {
- float distanceToCamera = Vector3.Distance(shakePosition, transform.position);
- if (distanceToCamera > maxDistanceForCameraShake)
- return;
- float fallOff = 1f - (distanceToCamera / maxDistanceForCameraShake);
- magnitude *= fallOff;
- if (magnitude < maximumShakeMagnitude)
- {
- currentShakeMagnitude = magnitude;
- }
- else
- {
- currentShakeMagnitude = maximumShakeMagnitude;
- }
- }
- void LateUpdate()
- {
- if(currentShakeMagnitude > 0f)
- Shake();
- }
- private void Shake()
- {
- Vector3 startPosition = transform.position - cameraShake;
- if (currentShakeMagnitude > 0f)
- {
- currentShakeMagnitude -= Time.deltaTime * shakeReductionSpeed;
- }
- else currentShakeMagnitude = 0;
- cameraShake = Random.insideUnitSphere * currentShakeMagnitude * shakeScalar;
- transform.position = startPosition + cameraShake;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment