Files
Bachelor-Arbeit-Adrian-Haefner/Assets/MobileARTemplateAssets/Scripts/ARFeatheredPlaneMeshVisualizerCompanion.cs
adriadri6972 d3d9c5f833 upload project
2025-07-31 15:21:08 +02:00

91 lines
3.1 KiB
C#

using UnityEngine.XR.Interaction.Toolkit.Utilities.Tweenables.Primitives;
namespace UnityEngine.XR.Interaction.Toolkit.Samples.ARStarterAssets
{
/// <summary>
/// Performs additional visual operations on the ARFeatheredPlane mesh, such as animated alpha fading.
/// </summary>
[RequireComponent(typeof(MeshRenderer))]
public class ARFeatheredPlaneMeshVisualizerCompanion : MonoBehaviour
{
[Tooltip("Renderer component on the ARFeatheredPlane prefab. Used to fetch the material to fade in/out.")]
[SerializeField]
Renderer m_PlaneRenderer;
/// <summary>
/// The Renderer component on the ARFeatheredPlane 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);
}
}
}
}