CameraFollow.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class CameraFollow : MonoBehaviour
  5. {
  6. public Transform playerPos;
  7. public float smooth = 8;
  8. private Vector3 offsetPos;
  9. private Vector3 originPos;
  10. private Quaternion originRot;
  11. public float shake_decay;
  12. public float shake_intensity;
  13. // Use this for initialization
  14. void Start()
  15. {
  16. offsetPos = transform.position - playerPos.position;
  17. }
  18. // Update is called once per frame
  19. void Update()
  20. {
  21. if (playerPos != null)
  22. {
  23. Vector3 camNewPos = playerPos.position + offsetPos;
  24. transform.position = Vector3.Lerp(transform.position, camNewPos, Time.deltaTime * smooth);
  25. }
  26. if (shake_intensity > 0)
  27. {
  28. transform.position = originPos + Random.insideUnitSphere * shake_intensity;
  29. transform.rotation = new Quaternion(
  30. originRot.x + Random.Range(-shake_intensity, shake_intensity) * 0.2f,
  31. originRot.y + Random.Range(-shake_intensity, shake_intensity) * 0.2f,
  32. originRot.z + Random.Range(-shake_intensity, shake_intensity) * 0.2f,
  33. originRot.w + Random.Range(-shake_intensity, shake_intensity) * 0.2f);
  34. shake_intensity -= shake_decay;
  35. }
  36. }
  37. public void Shake()
  38. {
  39. originPos = transform.position;
  40. originRot = transform.rotation;
  41. shake_intensity = 0.08f;
  42. shake_decay = 0.002f;
  43. }
  44. }