From d9f2bb30c5d0eb8e8513a0e16e13e3c4f2af89e1 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 1 Oct 2021 19:14:01 +0800 Subject: *misc --- Assets/Scripts/Unit/Components/UnitLensEffect.cs | 209 +++++++++++------------ 1 file changed, 102 insertions(+), 107 deletions(-) (limited to 'Assets/Scripts/Unit/Components/UnitLensEffect.cs') diff --git a/Assets/Scripts/Unit/Components/UnitLensEffect.cs b/Assets/Scripts/Unit/Components/UnitLensEffect.cs index ff5af87d..23539de0 100644 --- a/Assets/Scripts/Unit/Components/UnitLensEffect.cs +++ b/Assets/Scripts/Unit/Components/UnitLensEffect.cs @@ -7,87 +7,87 @@ using UnityEngine.Rendering; // Unit效果之一,镜头效果,通过command buffer实现 -public class UnitLensEffect : UnitComponent -{ - private List renderers; - - private static ObjectPool m_CommandBufferPool; - - private List m_Effects; +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(); + 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() - { + 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; + 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(); @@ -118,9 +118,9 @@ public class UnitLensEffect : UnitComponent } MainCamera.Instance.camera.AddCommandBuffer(ce, cb.Value); } - } - - private void OnRenderUnit() + } + + private void OnRenderUnit() { if (m_Effects == null || m_Effects.Count == 0) return; @@ -146,17 +146,12 @@ public class UnitLensEffect : UnitComponent for (int i = 0; i < m_Effects.Count; ++i) { LensEffectBase eff = m_Effects[i]; - MethodInfo method = eff.GetType().GetMethod("OnRenderFinish", BindingFlags.Instance | BindingFlags.Public); - if (method == null) - continue; - method.Invoke(eff, new object[] { }); - if(eff.CanDestroy()) - { + eff.OnRenderFinish(); + if (eff.CanDestroy()) temp.Add(eff); - } } - for(int i = 0; i< temp.Count; ++i) + for (int i = 0; i < temp.Count; ++i) { temp[i].OnDestroy(); m_Effects.Remove(temp[i]); @@ -169,19 +164,19 @@ public class UnitLensEffect : UnitComponent CameraEvent ce = cb.Key.ToCameraEvent(); MainCamera.Instance.camera.RemoveCommandBuffer(ce, cb.Value); } + } + + private void OnWillRenderObj(BodyPartRenderer renderer) + { + } + + private void OnRenderObj(BodyPartRenderer renderer) + { } - private void OnWillRenderObj(BodyPartRenderer renderer) - { - } - - private void OnRenderObj(BodyPartRenderer renderer) - { - } - void PrepareCommandBuffers() { - if(m_InUseCommandBuffers.Count != 0) + if (m_InUseCommandBuffers.Count != 0) { var temp = m_CachedCommandBuffers; m_CachedCommandBuffers = m_InUseCommandBuffers; @@ -192,14 +187,14 @@ public class UnitLensEffect : UnitComponent { usedEvent |= m_Effects[i].renderingEvents; } - foreach(ERenderingEvent evt in Enum.GetValues(typeof(ERenderingEvent))) + foreach (ERenderingEvent evt in Enum.GetValues(typeof(ERenderingEvent))) { if (evt == ERenderingEvent.None) continue; - if(usedEvent.HasFlag(evt)) + if (usedEvent.HasFlag(evt)) { CommandBuffer cb; - if(m_CachedCommandBuffers.TryGetValue(evt, out cb)) + if (m_CachedCommandBuffers.TryGetValue(evt, out cb)) { m_CachedCommandBuffers.Remove(evt); } @@ -211,29 +206,29 @@ public class UnitLensEffect : UnitComponent m_InUseCommandBuffers.Add(evt, cb); } } - foreach(var cb in m_CachedCommandBuffers) + 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; - } + 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