[ExecuteInEditMode]
public class SetRenderQueue : MonoBehaviour
{
public int RenderQueue = 3000;
private List<Material> m_MaterialList = null;
private void Awake()
{
m_MaterialList
= new List
<Material
>(); }
private void Start()
{
LoadMaterial();
LoadChildrenMaterial();
}
#if !UNITY_EDITOR
private void OnDestroy()
{
if (m_MaterialList.Count > 0)
{
for (int i = (m_MaterialList.Count - 1); i >= 0; i--)
{
Destroy(m_MaterialList[i]);
}
}
}
#endif
private void LoadMaterial()
{
var render = renderer;
if (render == null)
{
var particleSystem = GetComponent<ParticleSystem>();
if (particleSystem != null)
{
render = particleSystem.renderer;
}
}
if (render != null)
{
var material
= new Material
(render
.sharedMaterial); material.renderQueue = RenderQueue;
render.material = material;
m_MaterialList.Add(material);
}
}
private void LoadChildrenMaterial()
{
var render = renderer;
foreach (var child in gameObject.GetComponentsInChildren<Transform>())
{
render = child.renderer;
if (render == null)
{
var particleSystem = child.GetComponent<ParticleSystem>();
if (particleSystem != null)
{
render = particleSystem.renderer;
}
}
if (render != null)
{
var material
= new Material
(render
.sharedMaterial); material.renderQueue = RenderQueue;
render.material = material;
m_MaterialList.Add(material);
}
}
}
}