using UnityEngine; using UnityEngine.UI; public class UIParticleScaler : MonoBehaviour { private void Start() { //var scale = Mathf.Min(1f, UIManager.Instance().resolutionRatioScale); //MatchCurrentSize(scale); NeedCull(); } private void NeedCull() { Mask[] masks = gameObject.GetComponentsInParent<Mask>(); if (masks.Length <= 0) return; Mask mask = masks[0]; RectTransform rectTransform = mask.transform as RectTransform; if (rectTransform == null) return; Vector3[] corners = new Vector3[4]; rectTransform.GetWorldCorners(corners); float minX = corners[0].x; float minY = corners[0].y; float maxX = corners[2].x; float maxY = corners[2].y; Renderer[] particlesSystems = gameObject.GetComponentsInChildren<Renderer>(); for (int i = 0; i < particlesSystems.Length; i++) { particlesSystems[i].sharedMaterial.shader = Shader.Find("Zhanyou/Particles/AdditiveAlphaWriteMask"); particlesSystems[i].sharedMaterial.SetFloat("_MinX", minX); particlesSystems[i].sharedMaterial.SetFloat("_MinY", minY); particlesSystems[i].sharedMaterial.SetFloat("_MaxX", maxX); particlesSystems[i].sharedMaterial.SetFloat("_MaxY", maxY); } } }