diff options
author | chai <chaifix@163.com> | 2021-09-17 09:33:17 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-17 09:33:17 +0800 |
commit | ea4624fbef6e9d8f58da12be363807eb19a37b53 (patch) | |
tree | 5853f375a27121d9377288e818c7a93714d39e0c /Assets/Scripts/Unit/Components/UnitImageEffect.cs | |
parent | b7a445554e3f57b5fe4b1f1c619d0bed022893b6 (diff) |
+glitch
Diffstat (limited to 'Assets/Scripts/Unit/Components/UnitImageEffect.cs')
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitImageEffect.cs | 41 |
1 files changed, 37 insertions, 4 deletions
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<UnitImageEffectHandle> effects = new List<UnitImageEffectHandle>(); - public static GameObject effectPlane; + + public static GameObject effectPlane; private Dictionary<float/*size*/, List<UnitImageEffectHolder>/*pool*/> m_HolderPool = new Dictionary<float, List<UnitImageEffectHolder>>(); + private ObjectPool<UnitImageEffectHandle> m_HandlePool = new ObjectPool<UnitImageEffectHandle>(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<UnitImageEffectHandle>.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<Material>(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 |