- ParticleSystem, Spine, TMP 등 Renderer를 가진 오브젝트들을 NGUI 위에 올리고 Depth를 맞추기 위한 소스
(NGUI Widget의 Depth 제어 부분을 Renderer를 가진 오브젝트에서도 셋팅되도록 함)
- 출처에서는 ParticleSystem용으로 이름을 지어놨는데 어차피 Renderer를 가지고 있는 것들은 다 되는거라 이름 변경함
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[AddComponentMenu("NGUI/UI/NGUI Renderer Widget")]
public class NGUIRendererWidget : UIWidget
{
protected Renderer m_Renderer;
protected Material m_Mat;
public override Material material
{
get
{
return m_Mat;
}
set
{
if (m_Mat != value)
{
RemoveFromPanel();
m_Mat = value;
MarkAsChanged();
}
}
}
protected override void OnEnable()
{
Init();
base.OnEnable();
}
protected void Init()
{
if (null == m_Renderer)
{
m_Renderer = GetComponent<Renderer>();
}
if (null == m_Renderer)
{
return;
}
if (null == material)
{
if (false == Application.isPlaying)
{
material = m_Renderer.sharedMaterial;
m_Renderer.sharedMaterial = material;
}
else
{
material = m_Renderer.material;
m_Renderer.material = material;
}
}
}
private void OnWillRenderObject()
{
if (null != drawCall && drawCall.finalRenderQueue != material.renderQueue)
{
material.renderQueue = drawCall.finalRenderQueue;
}
if (Application.isPlaying == true && m_Renderer.material != material)
{
m_Renderer.material = material;
}
}
public override void OnFill(List<Vector3> verts, List<Vector2> uvs, List<Color> cols)
{
for (int i = 0; i < 4; i++)
{
verts.Add(Vector3.zero);
uvs.Add(Vector2.zero);
cols.Add(color);
}
}
}
[출처] https://tenlie10.tistory.com/169