using UnityEngine; using GCGame.Table; public class WarningCircle : ParticleCleaner { public float scale = 1.06f; private int _propertyId; private int _scaleId; private float _animDuration; private float _enableTime; private Material _innerMaterial; private Material _outerMaterial; private Transform _innerCircle; private Transform _outerCircle; public void SetEffectData(Tab_Effect effectData) { var radius = effectData.GetParamValuebyIndex(0) * 0.01f * 2f * scale; _innerCircle.localScale = Vector3.one * radius; _outerCircle.localScale = Vector3.one * radius; _outerMaterial.SetFloat(_scaleId, radius * 0.25f); var time = effectData.GetParamValuebyIndex(2); if (time > 0) { _animDuration = time.ToClientTime(); _enableTime = Time.time; _innerCircle.gameObject.SetActive(true); _innerMaterial.SetFloat(_scaleId, radius * 0.25f); Update(); } else { _animDuration = -1f; _innerCircle.gameObject.SetActive(false); } } protected override void Awake() { base.Awake(); _outerCircle = transform.Find("Outer"); _innerCircle = transform.Find("Inner"); _innerMaterial = _innerCircle.GetComponent().material; _outerMaterial = _outerCircle.GetComponent().material; _propertyId = Shader.PropertyToID("_Size"); _scaleId = Shader.PropertyToID("_Scale"); } private void OnDestroy() { if (_innerMaterial != null) Destroy(_innerMaterial); if (_outerMaterial != null) Destroy(_outerMaterial); } private void Update() { if (_animDuration > 0) { var ratio = Mathf.Clamp01((Time.time - _enableTime) / _animDuration); _innerMaterial.SetFloat(_propertyId, ratio); } } }