CinemachineFadeOutNearbyObjects.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using UnityEngine;
  3. namespace Cinemachine.Examples
  4. {
  5. /// <summary>
  6. /// An example add-on module for Cinemachine Virtual Camera for controlling
  7. /// the FadeOut shader included in our example package.
  8. /// </summary>
  9. [AddComponentMenu("")] // Hide in menu
  10. [ExecuteAlways]
  11. public class CinemachineFadeOutNearbyObjects : CinemachineExtension
  12. {
  13. /// <summary>
  14. /// Radius of the look at target.
  15. /// </summary>
  16. [Tooltip("Radius of the look at target.")]
  17. public float m_LookAtTargetRadius = 1;
  18. /// <summary>
  19. /// Minimum distance to have fading out effect in front of the camera.
  20. /// </summary>
  21. [Tooltip("Minimum distance to have fading out effect in front of the camera.")]
  22. public float m_MinDistance = 0;
  23. /// <summary>
  24. /// Maximum distance to have fading out effect in front of the camera.
  25. /// </summary>
  26. [Tooltip("Maximum distance to have fading out effect in front of the camera.")]
  27. public float m_MaxDistance = 8;
  28. /// <summary>
  29. /// If true, m_MaxDistance will be set to
  30. /// distance between this virtual camera and LookAt target minus m_LookAtTargetRadius.
  31. /// </summary>
  32. [Tooltip("If true, MaxDistance will be set to " +
  33. "distance between this virtual camera and LookAt target minus LookAtTargetRadius.")]
  34. public bool m_SetToCameraToLookAtDistance = false;
  35. /// <summary>
  36. /// Material using the FadeOut shader.
  37. /// </summary>
  38. [Tooltip("Material using the FadeOut shader.")]
  39. public Material m_FadeOutMaterial;
  40. static readonly int k_MaxDistanceID = Shader.PropertyToID("_MaxDistance");
  41. static readonly int k_MinDistanceID = Shader.PropertyToID("_MinDistance");
  42. /// <summary>
  43. /// Updates FadeOut shader on the specified FadeOutMaterial.
  44. /// </summary>
  45. /// <param name="vcam">The virtual camera being processed</param>
  46. /// <param name="stage">The current pipeline stage</param>
  47. /// <param name="state">The current virtual camera state</param>
  48. /// <param name="deltaTime">The current applicable deltaTime</param>
  49. protected override void PostPipelineStageCallback(
  50. CinemachineVirtualCameraBase vcam,
  51. CinemachineCore.Stage stage, ref CameraState state, float deltaTime)
  52. {
  53. if (stage == CinemachineCore.Stage.Finalize)
  54. {
  55. if (m_FadeOutMaterial == null || !m_FadeOutMaterial.HasProperty(k_MaxDistanceID) ||
  56. !m_FadeOutMaterial.HasProperty(k_MinDistanceID)) return;
  57. if (m_SetToCameraToLookAtDistance && vcam.LookAt != null)
  58. {
  59. m_MaxDistance = Vector3.Distance(vcam.transform.position, vcam.LookAt.position) - m_LookAtTargetRadius;
  60. }
  61. m_FadeOutMaterial.SetFloat(k_MaxDistanceID, m_MaxDistance);
  62. m_FadeOutMaterial.SetFloat(k_MinDistanceID, m_MinDistance);
  63. }
  64. }
  65. void OnValidate()
  66. {
  67. m_LookAtTargetRadius = Math.Max(0, m_LookAtTargetRadius);
  68. m_MinDistance = Math.Max(0, m_MinDistance);
  69. m_MaxDistance = Math.Max(0, m_MaxDistance);
  70. }
  71. }
  72. }