using UnityEngine; namespace Cielonos.MainGame.Effects { /// /// 单个残影个体生命周期与渐隐控制器。 /// public class AfterImageItem : MonoBehaviour { private MeshRenderer[] renderers; private MaterialPropertyBlock propBlock; private float fadeSpeed; private float currentFade = 1f; public void Initialize(MeshFilter[] filters, MeshRenderer[] renderers, Material afterImageMat, float duration) { this.renderers = renderers; this.fadeSpeed = 1f / duration; this.propBlock = new MaterialPropertyBlock(); foreach (var renderer in renderers) { if (renderer != null) { renderer.sharedMaterial = afterImageMat; } } } private void Update() { currentFade -= Time.deltaTime * fadeSpeed; if (currentFade <= 0f) { // 必须手动销毁运行时烘焙出的 Mesh 资源,防止显存泄漏 (GC 不会自动回收 BakeMesh 产生的网格) foreach (var filter in GetComponentsInChildren()) { if (filter != null && filter.sharedMesh != null) { Destroy(filter.sharedMesh); } } Destroy(gameObject); return; } propBlock.SetFloat("_Fade", currentFade); foreach (var renderer in renderers) { if (renderer != null) { renderer.SetPropertyBlock(propBlock); } } } } }