using Fort23.Core; using Fort23.UTool; using UnityEngine; namespace GameLogic.Combat.CombatTool.SceneTool { public class SceneDecoration : CObject { private static readonly int RongJieValue = Shader.PropertyToID("_RongJieValue"); public GameObjectPool pool; private MaterialPropertyBlock _materialPropertyBlock; private Renderer[] renderers; private float currTime; public void Init(GameObjectPool pool) { this.pool = pool; if (_materialPropertyBlock == null) { _materialPropertyBlock = new MaterialPropertyBlock(); } Vector3 pos = CombatController.currActiveCombat.CombatCameraControllder.root.position; Vector3 p2 = pool.own.transform.position; float d = Vector3.Distance(pos, p2); currTime = Random.Range(-1f, 0); renderers = pool.own.transform.GetComponentsInChildren(); SetPropertyBlock(); } private void SetPropertyBlock() { _materialPropertyBlock.SetFloat(RongJieValue, currTime); for (int i = 0; i < renderers.Length; i++) { renderers[i].SetPropertyBlock(_materialPropertyBlock); } } public void Update(float t) { if (currTime < 1) { currTime += t * 2f; SetPropertyBlock(); } } public override void ActiveObj() { } public override void DormancyObj() { currTime = 0; SetPropertyBlock(); renderers = null; GObjectPool.Instance.Recycle(pool); pool = null; } } }