using UnityEngine; using GCGame.Table; public class WarningRect : ParticleCleaner { public float scale = 1.01f; private int _widthId; private int _heightId; private float _animDuration; private float _enableTime; private Vector3 _size; private Transform _innerCircle; private Transform _outerCircle; private Material _innerMaterial; private Material _outerMaterial; protected override void Awake() { base.Awake(); _outerCircle = transform.Find("Outer"); _innerCircle = transform.Find("Inner"); _outerMaterial = _outerCircle.GetComponent().material; _innerMaterial = _innerCircle.GetComponent().material; _widthId = Shader.PropertyToID("_Width"); _heightId = Shader.PropertyToID("_Height"); } private void Update() { if (_animDuration > 0) { var sizeRatio = Mathf.Clamp01((Time.time - _enableTime) / _animDuration) * _size.y; _innerMaterial.SetFloat(_heightId, sizeRatio * 0.5f); _innerCircle.localScale = new Vector3(_size.x, sizeRatio, _size.z); var localPos = _innerCircle.localPosition; localPos.z = sizeRatio * 0.5f; _innerCircle.localPosition = localPos; } } public void SetEffectData(Tab_Effect effectData) { var width = effectData.GetParamValuebyIndex(0) * 0.01f * scale; var height = effectData.GetParamValuebyIndex(1) * 0.01f * scale; _size = new Vector3(width, height, 1f); _innerMaterial.SetFloat(_widthId, _size.x * 0.5f); _innerMaterial.SetFloat(_heightId, 0f); _outerMaterial.SetFloat(_heightId, _size.y * 0.5f); _outerMaterial.SetFloat(_widthId, _size.x * 0.5f); _innerCircle.localScale = new Vector3(_size.x, 0f, _size.z); _outerCircle.localScale = _size; var localPos = _innerCircle.localPosition; localPos.z = _size.y * 0.5f; _outerCircle.localPosition = localPos; localPos.z = 0f; _innerCircle.localPosition = localPos; var time = effectData.GetParamValuebyIndex(2); if (time > 0) { _animDuration = time.ToClientTime(); _enableTime = Time.time; _innerCircle.gameObject.SetActive(true); Update(); } else { _animDuration = -1f; _innerCircle.gameObject.SetActive(false); } } }