From 22891bf59032ba88262824255a706d652031384b Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 10 Mar 2022 14:07:40 +0800 Subject: * move folder --- Assets/Scripts/Unit/Components/UnitLensEffect.cs | 234 ----------------------- 1 file changed, 234 deletions(-) delete mode 100644 Assets/Scripts/Unit/Components/UnitLensEffect.cs (limited to 'Assets/Scripts/Unit/Components/UnitLensEffect.cs') diff --git a/Assets/Scripts/Unit/Components/UnitLensEffect.cs b/Assets/Scripts/Unit/Components/UnitLensEffect.cs deleted file mode 100644 index e145c331..00000000 --- a/Assets/Scripts/Unit/Components/UnitLensEffect.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; -using System.Reflection; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; - -// Unit效果之一,镜头效果,通过command buffer实现 - -public partial class UnitLensEffect : UnitComponent -{ - private List renderers; - - private static ObjectPool m_CommandBufferPool; - - private List m_Effects; - - // 每个角色维护单独的command buffers,而不是共享command buffer。有一定开销,但不重要。 - private Dictionary m_InUseCommandBuffers; - private Dictionary m_CachedCommandBuffers; - - static UnitLensEffect() - { - m_CommandBufferPool = new ObjectPool(null, null); - } - - public override void Initialize() - { - base.Initialize(); - - renderers = new List(); - m_Effects = new List(); - m_InUseCommandBuffers = new Dictionary(); - m_CachedCommandBuffers = new Dictionary(); - } - - public override void OnUpdate() - { - base.OnUpdate(); - - } - - public override void OnPostInitialize() - { - base.OnPostInitialize(); - - IBodyRendererAgent body = owner.unitRender.body; - if (body == null || body.renderers == null) - return; - for (int i = 0; i < body.renderers.Length; ++i) - { - var renderer = body.renderers[i]; - if (renderer == null) - continue; - RendererProxy proxy = renderer.renderer.gameObject.GetOrAddComponent(); - proxy.Initialize(renderer); - proxy.onWillRenderObject = OnWillRenderObj; - proxy.onRenderObject = OnRenderObj; - renderers.Add(proxy); - } - - MainCamera.Instance.customRenderingPipeline.onPreCull += OnWillRenderUnit; - MainCamera.Instance.customRenderingPipeline.onPostRender += OnRenderUnit; - - ///// - //m_Effects.Add(new LensEffect_MotionBlur()); - //m_Effects.Add(new LensEffect_BlurRim(Color.blue)); - //m_Effects.Add(new LensEffect_Buzz()); - } - - public override void Release() - { - MainCamera.Instance.customRenderingPipeline.onPreCull -= OnWillRenderUnit; - MainCamera.Instance.customRenderingPipeline.onPostRender -= OnRenderUnit; - - base.Release(); - } - - private void OnWillRenderUnit() - { - if (m_Effects == null || m_Effects.Count == 0) - return; - - PrepareCommandBuffers(); - - IBodyRendererAgent body = owner.unitRender.body; - if (body == null || body.renderers == null) - return; - if (m_Effects == null || m_Effects.Count == 0) - return; - foreach (var cb in m_InUseCommandBuffers) - { - cb.Value.Clear(); - ERenderingEvent re = cb.Key; - CameraEvent ce = re.ToCameraEvent(); - for (int i = 0; i < m_Effects.Count; ++i) - { - LensEffectBase eff = m_Effects[i]; - if (!eff.renderingEvents.HasFlag(re)) - continue; - MethodInfo method = eff.GetType().GetMethod(re.ToString(), BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(LensEffectBase.EStage), typeof(CommandBuffer) }, null); - if (method == null) - continue; - eff.owner = owner; - method.Invoke(eff, new object[] { LensEffectBase.EStage.BeforeIterate, cb.Value }); - - // iterate unit renderers - for (int j = 0; j < body.renderers.Length; ++j) - { - var renderer = body.renderers[j]; - if (renderer == null) - continue; - eff.curBodypartRenderer = renderer; - method.Invoke(eff, new object[] { LensEffectBase.EStage.Iterate, cb.Value }); - } - - method.Invoke(eff, new object[] { LensEffectBase.EStage.AfterIterate, cb.Value }); - } - MainCamera.Instance.camera.AddCommandBuffer(ce, cb.Value); - } - } - - private void OnRenderUnit() - { - if (m_Effects == null || m_Effects.Count == 0) - return; - - // 执行每个event的finisher - foreach (var cb in m_InUseCommandBuffers) - { - ERenderingEvent re = cb.Key; - for (int i = 0; i < m_Effects.Count; ++i) - { - LensEffectBase eff = m_Effects[i]; - if (!eff.renderingEvents.HasFlag(re)) - continue; - MethodInfo method = eff.GetType().GetMethod(re.ToString(), BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(LensEffectBase.EStage), typeof(CommandBuffer) }, null); - if (method == null) - continue; - method.Invoke(eff, new object[] { LensEffectBase.EStage.FinishRender, cb.Value }); - } - } - - List temp = ListPool.Get(); - - for (int i = 0; i < m_Effects.Count; ++i) - { - LensEffectBase eff = m_Effects[i]; - eff.OnRenderFinish(); - if (eff.CanDestroy()) - temp.Add(eff); - } - - for (int i = 0; i < temp.Count; ++i) - { - temp[i].OnDestroy(); - m_Effects.Remove(temp[i]); - } - - ListPool.Release(temp); - - foreach (var cb in m_InUseCommandBuffers) - { - CameraEvent ce = cb.Key.ToCameraEvent(); - MainCamera.Instance.camera.RemoveCommandBuffer(ce, cb.Value); - } - } - - private void OnWillRenderObj(BodyPartRenderer renderer) - { - } - - private void OnRenderObj(BodyPartRenderer renderer) - { - } - - void PrepareCommandBuffers() - { - if (m_InUseCommandBuffers.Count != 0) - { - var temp = m_CachedCommandBuffers; - m_CachedCommandBuffers = m_InUseCommandBuffers; - m_InUseCommandBuffers = temp; - } - ERenderingEvent usedEvent = ERenderingEvent.None; - for (int i = 0; i < m_Effects.Count; ++i) - { - usedEvent |= m_Effects[i].renderingEvents; - } - foreach (ERenderingEvent evt in Enum.GetValues(typeof(ERenderingEvent))) - { - if (evt == ERenderingEvent.None) - continue; - if (usedEvent.HasFlag(evt)) - { - CommandBuffer cb; - if (m_CachedCommandBuffers.TryGetValue(evt, out cb)) - { - m_CachedCommandBuffers.Remove(evt); - } - else - { - cb = m_CommandBufferPool.Get(); - cb.name = evt.ToString(); - } - m_InUseCommandBuffers.Add(evt, cb); - } - } - foreach (var cb in m_CachedCommandBuffers) - { - m_CommandBufferPool.Release(cb.Value); - } - m_CachedCommandBuffers.Clear(); - } - - static CommandBuffer ClaimCommandBuffer() - { - CommandBuffer cb = m_CommandBufferPool.Get(); - cb.Clear(); - return cb; - } - - static void ReleaseCommandBuffer(ref CommandBuffer cb) - { - m_CommandBufferPool.Release(cb); - cb = null; - } - - public void AddEffect(LensEffectBase effect) - { - m_Effects.Add(effect); - } - -} \ No newline at end of file -- cgit v1.1-26-g67d0