| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using UnityEngine.XR.Interaction.Toolkit.Utilities.Tweenables.Primitives;
- namespace UnityEngine.XR.Templates.AR
- {
- /// <summary>
- /// Performs additional visual operations on the ARPlane mesh, such as animated alpha fading.
- /// </summary>
- [RequireComponent(typeof(MeshRenderer))]
- public class ARPlaneMeshVisualizerFader : MonoBehaviour
- {
- [Tooltip("Renderer component on the ARPlaneMeshVisualizer prefab. Used to fetch the material to fade in/out.")]
- [SerializeField]
- Renderer m_PlaneRenderer;
- /// <summary>
- /// The Renderer component on the ARPlaneMeshVisualizer prefab. Used to fetch the material to fade in/out.
- /// </summary>
- public Renderer planeRenderer
- {
- get => m_PlaneRenderer;
- set => m_PlaneRenderer = value;
- }
- [Tooltip("Fade in/out speed multiplier applied during the alpha tweening. The lower the value, the slower it works. A value of 1 is full speed (1 second).")]
- [Range(0.1f, 1.0f)]
- [SerializeField]
- float m_FadeSpeed = 1f;
- /// <summary>
- /// Fade in/out speed multiplier applied during the alpha tweening.
- /// The lower the value, the slower it works. A value of 1 is full speed (1 second).
- /// </summary>
- public float fadeSpeed
- {
- get => m_FadeSpeed;
- set => m_FadeSpeed = value;
- }
- int m_ShaderAlphaPropertyID;
- float m_SurfaceVisualAlpha = 1f;
- float m_TweenProgress;
- Material m_PlaneMaterial;
- #pragma warning disable CS0618 // Type or member is obsolete -- affordance system to be replaced in a future XRI version
- readonly FloatTweenableVariable m_AlphaTweenableVariable = new FloatTweenableVariable();
- #pragma warning restore CS0618
- /// <summary>
- /// See <see cref="MonoBehaviour"/>.
- /// </summary>
- void Awake()
- {
- m_ShaderAlphaPropertyID = Shader.PropertyToID("_PlaneAlpha");
- m_PlaneMaterial = m_PlaneRenderer.material;
- visualizeSurfaces = true;
- }
- /// <summary>
- /// See <see cref="MonoBehaviour"/>.
- /// </summary>
- void OnDestroy()
- {
- m_AlphaTweenableVariable.Dispose();
- }
- /// <summary>
- /// See <see cref="MonoBehaviour"/>.
- /// </summary>
- void Update()
- {
- m_AlphaTweenableVariable.HandleTween(m_TweenProgress);
- m_TweenProgress += Time.unscaledDeltaTime * m_FadeSpeed;
- m_SurfaceVisualAlpha = m_AlphaTweenableVariable.Value;
- m_PlaneMaterial.SetFloat(m_ShaderAlphaPropertyID, m_SurfaceVisualAlpha);
- }
- /// <summary>
- /// Show plane surfaces if true, hide plane surfaces if false
- /// </summary>
- public bool visualizeSurfaces
- {
- set
- {
- m_TweenProgress = 0f;
- m_AlphaTweenableVariable.target = value ? 1f : 0f;
- m_AlphaTweenableVariable.HandleTween(0f);
- }
- }
- public void SetVisualsImmediate(float alpha)
- {
- m_AlphaTweenableVariable.target = alpha;
- m_AlphaTweenableVariable.HandleTween(1f);
- }
- }
- }
|