From ea4624fbef6e9d8f58da12be363807eb19a37b53 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 17 Sep 2021 09:33:17 +0800 Subject: +glitch --- Assets/Scripts/Unit/Components/UnitImageEffect.cs | 41 ++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'Assets/Scripts/Unit/Components/UnitImageEffect.cs') diff --git a/Assets/Scripts/Unit/Components/UnitImageEffect.cs b/Assets/Scripts/Unit/Components/UnitImageEffect.cs index 999740f3..a2689ca1 100644 --- a/Assets/Scripts/Unit/Components/UnitImageEffect.cs +++ b/Assets/Scripts/Unit/Components/UnitImageEffect.cs @@ -31,10 +31,13 @@ public class UnitImageEffectHandle public class UnitImageEffect : UnitComponent { public List effects = new List(); - public static GameObject effectPlane; + + public static GameObject effectPlane; private Dictionary/*pool*/> m_HolderPool = new Dictionary>(); + private ObjectPool m_HandlePool = new ObjectPool(null, null); + public override void OnUpdate() { base.OnUpdate(); @@ -55,6 +58,7 @@ public class UnitImageEffect : UnitComponent temp[j].holder.gameObject.SetActive(false); ReleaseHolder(ref temp[j].holder); effects.Remove(temp[j]); + m_HandlePool.Release(temp[j]); } ListPool.Release(temp); } @@ -123,7 +127,8 @@ public class UnitImageEffect : UnitComponent public void ShowMotionBlur(float lifeTime, float angle, float distance) { - UnitImageEffectHandle handle = new UnitImageEffectHandle(); + UnitImageEffectHandle handle = m_HandlePool.Get(); + handle.lifeTime = lifeTime; handle.curTime = 0; float size = UnitManager.Instance.pc.unitDetail.snapshotBound; @@ -143,13 +148,41 @@ public class UnitImageEffect : UnitComponent handle.holder.gameObject.transform.position = UnitManager.Instance.pc.center; handle.holder.renderer.GetPropertyBlock(block); - block.SetFloat("_Distance", (normalTime) * distance); + block.SetFloat("_Distance", /*(normalTime) * */distance); + handle.holder.renderer.SetPropertyBlock(block); + }; + + effects.Add(handle); + } + + public void ShowGlitch(float lifeTime) + { + UnitImageEffectHandle handle = m_HandlePool.Get(); + + handle.lifeTime = lifeTime; + handle.curTime = 0; + float size = UnitManager.Instance.pc.unitDetail.snapshotBound; + handle.holder = ClaimHolder(size); + handle.holder.gameObject.SetActive(true); + string matPath = ResourceManager.Instance.imageEffectMaterails[ResourceManager.EImageEffectMaterails.Glitch]; + handle.holder.renderer.sharedMaterial = ResourceManager.Instance.LoadAsset(matPath); + + MaterialPropertyBlock block = new MaterialPropertyBlock(); + handle.holder.renderer.GetPropertyBlock(block); + handle.holder.renderer.SetPropertyBlock(block); + + handle.stepFunc = (float normalTime) => + { + handle.holder.gameObject.transform.position = UnitManager.Instance.pc.center; + + handle.holder.renderer.GetPropertyBlock(block); handle.holder.renderer.SetPropertyBlock(block); }; effects.Add(handle); } - #endregion + + #endregion } \ No newline at end of file -- cgit v1.1-26-g67d0