diff options
author | chai <chaifix@163.com> | 2021-09-17 20:09:19 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-17 20:09:19 +0800 |
commit | 234c25bc8761a4d41bc5b4aa362449cf3e806e13 (patch) | |
tree | 69cc0b7002ac8018af1806de366526dfc089d49e /Assets/Scripts/Unit/Components | |
parent | ea4624fbef6e9d8f58da12be363807eb19a37b53 (diff) |
*unit image effect
Diffstat (limited to 'Assets/Scripts/Unit/Components')
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitComponent.cs | 4 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitImageEffect.cs | 36 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitRender.cs | 35 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitState/PCState.cs | 2 |
4 files changed, 62 insertions, 15 deletions
diff --git a/Assets/Scripts/Unit/Components/UnitComponent.cs b/Assets/Scripts/Unit/Components/UnitComponent.cs index a5034581..825b6d92 100644 --- a/Assets/Scripts/Unit/Components/UnitComponent.cs +++ b/Assets/Scripts/Unit/Components/UnitComponent.cs @@ -29,6 +29,10 @@ public class UnitComponent : MonoBehaviour m_Owner = GetComponent<UnitController>(); } + public virtual void OnPostInitialize() + { + } + public virtual void Release() { m_Owner = null; diff --git a/Assets/Scripts/Unit/Components/UnitImageEffect.cs b/Assets/Scripts/Unit/Components/UnitImageEffect.cs index a2689ca1..8af48a3e 100644 --- a/Assets/Scripts/Unit/Components/UnitImageEffect.cs +++ b/Assets/Scripts/Unit/Components/UnitImageEffect.cs @@ -17,14 +17,17 @@ public class UnitImageEffectHolder } } -public delegate void UnitImageEffectStepCallback(float normalizedTime); - public class UnitImageEffectHandle { - public float lifeTime; + public delegate void UnitImageEffectStepCallback(float normalizedTime);
+ public delegate void UnitImageEffectEndCallback();
+
+ public float lifeTime; public float curTime; public UnitImageEffectHolder holder; + public UnitImageEffectStepCallback stepFunc; + public UnitImageEffectEndCallback onStop; } //Unit后处理效果 @@ -49,6 +52,7 @@ public class UnitImageEffect : UnitComponent if(handle.curTime > handle.lifeTime) { temp.Add(handle); + handle.onStop?.Invoke(); continue; } handle.stepFunc?.Invoke(handle.curTime / handle.lifeTime); @@ -123,7 +127,6 @@ public class UnitImageEffect : UnitComponent holder = null; } - #region effects public void ShowMotionBlur(float lifeTime, float angle, float distance) { @@ -155,9 +158,11 @@ public class UnitImageEffect : UnitComponent effects.Add(handle); } - public void ShowGlitch(float lifeTime) + public void ShowGlitch(float lifeTime, bool hideUnitInMainCamera = true) { - UnitImageEffectHandle handle = m_HandlePool.Get(); + PCController pc = UnitManager.Instance.pc as PCController;
+
+ UnitImageEffectHandle handle = m_HandlePool.Get(); handle.lifeTime = lifeTime; handle.curTime = 0; @@ -171,18 +176,25 @@ public class UnitImageEffect : UnitComponent handle.holder.renderer.GetPropertyBlock(block); handle.holder.renderer.SetPropertyBlock(block); - handle.stepFunc = (float normalTime) => - { + handle.stepFunc = (float normalTime) => { + UnitCamera.Instance.Render(); + handle.holder.gameObject.transform.position = UnitManager.Instance.pc.center; handle.holder.renderer.GetPropertyBlock(block); handle.holder.renderer.SetPropertyBlock(block); }; - effects.Add(handle); - } + if (hideUnitInMainCamera)
+ {
+ pc.unitRender.SetVisibilityInAllCameras(false);
+ } - - #endregion + handle.onStop = () => {
+ pc.unitRender.SetVisibilityInAllCameras(true);
+ };
+
+ effects.Add(handle); + } }
\ No newline at end of file diff --git a/Assets/Scripts/Unit/Components/UnitRender.cs b/Assets/Scripts/Unit/Components/UnitRender.cs index 435c517d..d1ea0ffb 100644 --- a/Assets/Scripts/Unit/Components/UnitRender.cs +++ b/Assets/Scripts/Unit/Components/UnitRender.cs @@ -6,17 +6,33 @@ using UnityEngine; [DisallowMultipleComponent] public class UnitRender : UnitComponent { + private IBodyRendererAgent m_Body; + + public Renderer mainRenderer
+ {
+ get
+ {
+ if (this.owner.unitDetail == null)
+ return null;
+ return m_Body.mainRenderer.renderer;
+ }
+ } public override void Initialize()
{
base.Initialize();
} + public override void OnPostInitialize()
+ {
+ base.OnPostInitialize();
+ m_Body = owner.unitDetail as IBodyRendererAgent;
+ } + public void SetVisibilityInMainCamera(bool isVisible)
{
LayerMask mask = LayerMask.GetMask("PlayerCharacter");
-
- if(!isVisible)
+ if (!isVisible)
{
SceneManager.Instance.mainCamera.cullingMask &= ~mask.value;
}
@@ -26,4 +42,19 @@ public class UnitRender : UnitComponent }
} + public void SetVisibilityInAllCameras(bool isVisible)
+ {
+ if (mainRenderer == null)
+ return;
+
+ if (isVisible)
+ {
+ mainRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
+ }
+ else
+ {
+ mainRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly;
+ }
+ } + } diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState.cs b/Assets/Scripts/Unit/Components/UnitState/PCState.cs index eae1b370..060d6e91 100644 --- a/Assets/Scripts/Unit/Components/UnitState/PCState.cs +++ b/Assets/Scripts/Unit/Components/UnitState/PCState.cs @@ -82,7 +82,7 @@ public partial class PCState : UnitState if(m_PrevState != m_State && owner.unitRender != null)
{
- owner.unitRender.SetVisibilityInMainCamera(true);
+ // owner.unitRender.SetVisibilityInMainCamera(true);
}
StartCoroutine(m_State.ToString(), param); |