From b781f9ecf36bcc6c614538ac427fa2eb8f1e29d2 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 29 Sep 2021 20:26:12 +0800 Subject: *misc --- Assets/Scripts/Unit/LensEffect/LensEffectBase.cs | 6 +++++- Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs | 22 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) (limited to 'Assets/Scripts/Unit/LensEffect') diff --git a/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs b/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs index 36bde0e3..92e75ca6 100644 --- a/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs +++ b/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs @@ -10,7 +10,7 @@ public class MaterialEntry } // unit 镜头效果,和image effect的区别在于不光是后处理 -public abstract class LensEffectBase : MonoBehaviour +public abstract class LensEffectBase { public enum EStage { @@ -104,6 +104,10 @@ public abstract class LensEffectBase : MonoBehaviour public virtual void BeforeEverything(EStage stage, CommandBuffer cb) { } public virtual void AfterEverything(EStage stage, CommandBuffer cb) { } + public virtual bool CanDestroy() { return false; } + + public virtual void OnDestroy() { } + // 角色渲染完毕 public virtual void OnRenderFinish() { diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs index 935a7286..84f8edcb 100644 --- a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs @@ -14,6 +14,8 @@ public class LensEffect_Dash : LensEffectBase TRS trs; float angle; + float curTime = 0; + public LensEffect_Dash(Color color, float lifeTime, float angle, UnitSnapshotInfo snapshot) : base() { rimColor = color; @@ -22,6 +24,7 @@ public class LensEffect_Dash : LensEffectBase trs = snapshot.trs; this.snapshot = UnitManager.Instance.ClaimSnapshotSolo(snapshot); this.angle = angle; + } public override void AfterForwardOpaque(EStage stage, CommandBuffer cb) @@ -41,7 +44,7 @@ public class LensEffect_Dash : LensEffectBase void Before(CommandBuffer cb) { - cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear); + cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear); cb.SetRenderTarget(tempID); cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); @@ -65,15 +68,28 @@ public class LensEffect_Dash : LensEffectBase } void After(CommandBuffer cb) - { - MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.MotionBlur].name); + { + curTime += Time.deltaTime; + + MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.MotionBlur].name); Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound); blur.material.SetVector("_TileOffset", tileOffset); blur.material.SetFloat("_Angle", Mathf.Rad2Deg * angle); + blur.material.SetFloat("_AlphaMultiplier", Mathf.Clamp(1 - curTime / lifeTime, 0, 1)); cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material); cb.ReleaseTemporaryRT(tempID); } + public override bool CanDestroy() + { + return curTime > lifeTime; + } + + public override void OnDestroy() + { + UnitManager.Instance.ReleaseSnapshot(ref snapshot); + } + } \ No newline at end of file -- cgit v1.1-26-g67d0