summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/Components/UnitLensEffect.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit/Components/UnitLensEffect.cs')
-rw-r--r--Assets/Scripts/Unit/Components/UnitLensEffect.cs209
1 files changed, 102 insertions, 107 deletions
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<RendererProxy> renderers;
-
- private static ObjectPool<CommandBuffer> m_CommandBufferPool;
-
- private List<LensEffectBase> m_Effects;
+public partial class UnitLensEffect : UnitComponent
+{
+ private List<RendererProxy> renderers;
+
+ private static ObjectPool<CommandBuffer> m_CommandBufferPool;
+
+ private List<LensEffectBase> m_Effects;
// 每个角色维护单独的command buffers,而不是共享command buffer。有一定开销,但不重要。
private Dictionary<ERenderingEvent, CommandBuffer> m_InUseCommandBuffers;
private Dictionary<ERenderingEvent, CommandBuffer> m_CachedCommandBuffers;
- static UnitLensEffect()
- {
- m_CommandBufferPool = new ObjectPool<CommandBuffer>(null, null);
- }
-
- public override void Initialize()
- {
- base.Initialize();
-
- renderers = new List<RendererProxy>();
- m_Effects = new List<LensEffectBase>();
+ static UnitLensEffect()
+ {
+ m_CommandBufferPool = new ObjectPool<CommandBuffer>(null, null);
+ }
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ renderers = new List<RendererProxy>();
+ m_Effects = new List<LensEffectBase>();
m_InUseCommandBuffers = new Dictionary<ERenderingEvent, CommandBuffer>();
m_CachedCommandBuffers = new Dictionary<ERenderingEvent, CommandBuffer>();
- }
-
- 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<RendererProxy>();
- 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<RendererProxy>();
+ 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