// -------------------------------------------------------------------------------------------------------------------- // // Copyright (c) VRMADA, All rights reserved. // // -------------------------------------------------------------------------------------------------------------------- using UltimateXR.Core.Components; using UnityEngine; namespace UltimateXR.Animation.Materials { /// /// Component that changes the RenderQueue of a material. Changes will be applied at runtime. /// public class UxrMaterialRenderQueue : UxrComponent { #region Inspector Properties/Serialized Fields [SerializeField] private bool _instanceOnly; [SerializeField] private bool _everyFrame = true; [SerializeField] private int _slot; [SerializeField] private int _value; #endregion #region Unity /// /// Gets the component and applies the RenderQueue value. /// protected override void Start() { base.Start(); _renderer = GetComponent(); Apply(); } /// /// Applies the RenderQueue each frame if required. /// private void LateUpdate() { if (_everyFrame) { Apply(); } } #endregion #region Private Methods /// /// Internal method that applies the RenderQueue value. /// private void Apply() { if (_renderer != null) { if (_instanceOnly) { Material[] materials = _renderer.materials; if (_slot >= 0 && _slot < materials.Length) { materials[_slot].renderQueue = _value; } _renderer.materials = materials; } else { Material[] materials = _renderer.sharedMaterials; if (_slot >= 0 && _slot < materials.Length) { materials[_slot].renderQueue = _value; } _renderer.sharedMaterials = materials; } } } #endregion #region Private Types & Data private Renderer _renderer; #endregion } }