DynamicFOVFilter.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class DynamicFOVFilter : MonoBehaviour
  5. {
  6. // Start is called before the first frame update
  7. public GameObject filter;
  8. //VignetteModel.Settings vignetteSettings;
  9. //public PostProcessingProfile profile;
  10. public float decaySpeed = 20f;
  11. public float minFilterScale = .5f;
  12. public float maxFilterScale = 1.5f;
  13. Vector3 lastPosition;
  14. Vector3 lastOrientation;
  15. Rigidbody rigidbody;
  16. bool usingRigidbody;
  17. public float decayRate = -.001f;
  18. public float angluarSpeedModifier = .1f;
  19. public float translationSpeedModifier = .1f;
  20. Vector3 angularVelocity;
  21. Vector3 translationalVelocity;
  22. float speed = 0;
  23. float angularSpeed = 0;
  24. float filterScale = 0f;
  25. float checkTime = .1f;
  26. IEnumerator TrackVelocities(){
  27. Vector3 lastRotation = new Vector3(0,0,0);
  28. Vector3 lastPosition = transform.position;
  29. while(true){
  30. Vector3 rotationDelta = transform.eulerAngles - lastRotation;
  31. lastRotation = transform.eulerAngles;
  32. Vector3 translationDelta = transform.position - lastPosition;
  33. lastPosition = transform.position;
  34. angularVelocity = rotationDelta / checkTime;
  35. translationalVelocity = translationDelta / checkTime;
  36. yield return new WaitForSeconds(checkTime);
  37. }
  38. }
  39. void Start()
  40. {
  41. lastPosition = gameObject.transform.position;
  42. lastOrientation = gameObject.transform.eulerAngles;
  43. rigidbody = gameObject.GetComponent<Rigidbody>();
  44. StartCoroutine(TrackVelocities());
  45. //VignetteModel.Settings vSettings = profile.vignette.settings;
  46. //vSettings.intensity = 0;
  47. }
  48. void Update()
  49. {
  50. float translationalSpeed;
  51. float rotationalSpeed;
  52. translationalSpeed = translationalVelocity.magnitude;
  53. rotationalSpeed = angularVelocity.magnitude;
  54. float cRate = ((translationalSpeed - decaySpeed) * translationSpeedModifier) + (rotationalSpeed*angluarSpeedModifier);
  55. if(translationalSpeed <= decaySpeed){
  56. filterScale -= decayRate;
  57. Debug.Log("DECAYING");
  58. }else{
  59. filterScale -= Mathf.Abs(cRate);
  60. }
  61. if(filterScale > maxFilterScale){
  62. filterScale = maxFilterScale;
  63. }
  64. if(filterScale < minFilterScale){
  65. filterScale = minFilterScale;
  66. }
  67. //update scale of filter
  68. filter.transform.localScale = new Vector3(filterScale,filterScale,1);
  69. lastPosition = gameObject.transform.position;
  70. }
  71. }