using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.UI;
public class UIParticle : MonoBehaviour
{
private static Camera uiCamera;
private class MatEntry
{
public Material customMat;
public Material baseMat;
/// <summary>
/// 引用计数
/// </summary>
public int count;
public int id;
}
private static List<MatEntry> m_List = new List<MatEntry>();
protected List<Material> m_MaskMaterials = new List<Material>();
protected List<Material> defaults;
private Renderer[] renders;
private bool CurMatIsDefault = true;
private MaterialPropertyBlock prop;
private static int nShaderMaskId = -99;
private static int GetMaskIdForShader()
{
if (nShaderMaskId == -99)
{
nShaderMaskId = Shader.PropertyToID("_Mask");
}
return nShaderMaskId;
}
public static void SetUICamera(Camera camera)
{
UIParticle.uiCamera = camera;
}
void SetDefalutMaterial()
{
if (defaults != null) {
return;
}
defaults = new List<Material>();
renders = this.GetComponentsInChildren<Renderer>();
for (int i = 0; i < renders.Length; i++)
{
defaults.Add(renders[i].sharedMaterial);
}
}
private MaterialPropertyBlock GetMaterialPropertyBlock()
{
if (prop == null)
{
prop = new MaterialPropertyBlock();
}
return prop;
}
public void OnEnable()
{
SetDefalutMaterial();
Mask mask = GetMask();
if (mask!=null)
{
CurMatIsDefault = fal