From 10ea61d63a87931a98c3591735f0d70e10939401 Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 26 Sep 2021 09:51:36 +0800 Subject: *misc --- Assets/Scripts/Unit/AI/Actions.meta | 8 -- Assets/Scripts/Unit/AI/Conditionals.meta | 8 -- Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs | 14 +++ .../Scripts/Unit/AfterImage/UnitSnapshot.cs.meta | 11 +++ Assets/Scripts/Unit/Components/UnitLensEffect.cs | 8 +- .../Scripts/Unit/LensEffect/LensEffect_BlurRim.cs | 110 +++++++++++---------- Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs | 89 +++++++++++++++++ .../Unit/LensEffect/LensEffect_Dash.cs.meta | 11 +++ Assets/Scripts/Unit/UnitDetail.cs | 3 + 9 files changed, 195 insertions(+), 67 deletions(-) delete mode 100644 Assets/Scripts/Unit/AI/Actions.meta delete mode 100644 Assets/Scripts/Unit/AI/Conditionals.meta create mode 100644 Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs create mode 100644 Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta create mode 100644 Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs create mode 100644 Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta (limited to 'Assets/Scripts/Unit') diff --git a/Assets/Scripts/Unit/AI/Actions.meta b/Assets/Scripts/Unit/AI/Actions.meta deleted file mode 100644 index 9b4ad463..00000000 --- a/Assets/Scripts/Unit/AI/Actions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 971e9d55b8bc0894eb6a110fb962000b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Unit/AI/Conditionals.meta b/Assets/Scripts/Unit/AI/Conditionals.meta deleted file mode 100644 index 70a86da5..00000000 --- a/Assets/Scripts/Unit/AI/Conditionals.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 85b7e0c7ed1d12f42a5178bfbf3d934c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs b/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs new file mode 100644 index 00000000..8935293a --- /dev/null +++ b/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// 保存当前角色的快照 +public struct UnitSnapshot +{ + public UnitController unit; + + public int curAnimState { get; private set; } + + public float normalizedTime; + +} \ No newline at end of file diff --git a/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta b/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta new file mode 100644 index 00000000..31c837aa --- /dev/null +++ b/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d63b30ef896f0a548865db54d2bdbbeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Unit/Components/UnitLensEffect.cs b/Assets/Scripts/Unit/Components/UnitLensEffect.cs index 394a0b92..f9d22a85 100644 --- a/Assets/Scripts/Unit/Components/UnitLensEffect.cs +++ b/Assets/Scripts/Unit/Components/UnitLensEffect.cs @@ -34,6 +34,12 @@ public class UnitLensEffect : UnitComponent m_CachedCommandBuffers = new Dictionary(); } + public override void OnUpdate() + { + base.OnUpdate(); + + } + public override void OnPostInitialize() { base.OnPostInitialize(); @@ -58,7 +64,7 @@ public class UnitLensEffect : UnitComponent ///// //m_Effects.Add(new LensEffect_MotionBlur()); - m_Effects.Add(new LensEffect_BlurRim()); + //m_Effects.Add(new LensEffect_BlurRim(Color.blue)); } public override void Release() diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs index 4f90a777..6c61f2e7 100644 --- a/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs @@ -7,70 +7,80 @@ public class LensEffect_BlurRim : LensEffectBase { public override ERenderingEvent renderingEvents => ERenderingEvent.AfterForwardOpaque; + Color rimColor; int tempID; - public override void AfterForwardOpaque(EStage stage, CommandBuffer cb) + public LensEffect_BlurRim(Color color) : base() + { + rimColor = color; + tempID = Shader.PropertyToID("_BlurRim_RT0"); + } + + public override void AfterForwardOpaque(EStage stage, CommandBuffer cb) { if (stage == EStage.Before) { - tempID = Shader.PropertyToID("_Temp1"); - - cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear); - cb.SetRenderTarget(tempID); - cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); + Before(cb); } else if (stage == EStage.Iterate) { - Matrix4x4 obj2Wod = Matrix4x4.identity; - int subMeshCount = 0; - if (curBodypartRenderer.renderer is SkinnedMeshRenderer) - { - SkinnedMeshRenderer smr = curBodypartRenderer.renderer as SkinnedMeshRenderer; - Vector3 pos = smr.rootBone.transform.position; - Quaternion rot = smr.rootBone.transform.rotation; - obj2Wod = MatrixUtility.RotateAndTranslate(pos, rot); - subMeshCount = smr.sharedMesh.subMeshCount; - } - else if (curBodypartRenderer.renderer is MeshRenderer) - { - obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix; - subMeshCount = curBodypartRenderer.renderer.GetComponent().sharedMesh.subMeshCount; - } - - for (int i = 0; i < subMeshCount; ++i) - { - MaterialEntry mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name); - mat.material.SetColor("_Color", Color.red); - mat.material.SetMatrix("_ObjectToWorld", obj2Wod); - cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i); - - mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name); - mat.material.SetColor("_Color", Color.red); - obj2Wod = Matrix4x4.Translate(new Vector3(1,0,0)) * obj2Wod; - mat.material.SetMatrix("_ObjectToWorld", obj2Wod); - cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i); - - mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name); - mat.material.SetColor("_Color", Color.red); - obj2Wod = Matrix4x4.Translate(new Vector3(-2, 0, 0)) * obj2Wod; - mat.material.SetMatrix("_ObjectToWorld", obj2Wod); - cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i); - } - } + Iterate(cb); + } else if (stage == EStage.After) { - MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name); - - Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound); - blur.material.SetVector("_TileOffset", tileOffset); - - cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material); - tempID = Shader.PropertyToID("_Temp1"); - cb.ReleaseTemporaryRT(tempID); + After(cb); } else if (stage == EStage.Finished) { } } + void Before(CommandBuffer cb) + { + cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear); + cb.SetRenderTarget(tempID); + cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); + } + + void Iterate(CommandBuffer cb) + { + Matrix4x4 obj2Wod = Matrix4x4.identity; + int subMeshCount = 0; + if (curBodypartRenderer.renderer is SkinnedMeshRenderer) + { + SkinnedMeshRenderer smr = curBodypartRenderer.renderer as SkinnedMeshRenderer; + Vector3 pos = smr.rootBone.transform.position; + Quaternion rot = smr.rootBone.transform.rotation; + obj2Wod = MatrixUtility.RotateAndTranslate(pos, rot); + obj2Wod = Matrix4x4.Translate(new Vector3(1, 0, 0)) * obj2Wod; + subMeshCount = smr.sharedMesh.subMeshCount; + } + else if (curBodypartRenderer.renderer is MeshRenderer) + { + obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix; + obj2Wod = Matrix4x4.Translate(new Vector3(1, 0, 0)) * obj2Wod; + subMeshCount = curBodypartRenderer.renderer.GetComponent().sharedMesh.subMeshCount; + } + + for (int i = 0; i < subMeshCount; ++i) + { + MaterialEntry mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name); + mat.material.SetColor("_Color", rimColor); + mat.material.SetMatrix("_ObjectToWorld", obj2Wod); + mat.material.SetTexture("_MainTex", curBodypartRenderer.renderer.sharedMaterial.GetTexture("_MainTex")); + cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i); + } + } + + void After(CommandBuffer cb) + { + MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name); + + Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound); + blur.material.SetVector("_TileOffset", tileOffset); + + cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material); + cb.ReleaseTemporaryRT(tempID); + } + } \ No newline at end of file diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs new file mode 100644 index 00000000..9111bd68 --- /dev/null +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs @@ -0,0 +1,89 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +public class LensEffect_Dash : LensEffectBase +{ + public override ERenderingEvent renderingEvents => ERenderingEvent.AfterForwardOpaque; + + Color rimColor; + int tempID; + float lifeTime; + UnitSnapshot snapshot; + + public LensEffect_Dash(Color color, float lifeTime) : base() + { + rimColor = color; + tempID = Shader.PropertyToID("_BlurRim_RT0"); + this.lifeTime = lifeTime; + } + + public override void AfterForwardOpaque(EStage stage, CommandBuffer cb) + { + if (stage == EStage.Before) + { + Before(cb); + } + else if (stage == EStage.Iterate) + { + Iterate(cb); + } + else if (stage == EStage.After) + { + After(cb); + } + else if (stage == EStage.Finished) + { + } + } + + void Before(CommandBuffer cb) + { + cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear); + cb.SetRenderTarget(tempID); + cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0)); + } + + void Iterate(CommandBuffer cb) + { + Matrix4x4 obj2Wod = Matrix4x4.identity; + int subMeshCount = 0; + if (curBodypartRenderer.renderer is SkinnedMeshRenderer) + { + SkinnedMeshRenderer smr = curBodypartRenderer.renderer as SkinnedMeshRenderer; + Vector3 pos = smr.rootBone.transform.position; + Quaternion rot = smr.rootBone.transform.rotation; + obj2Wod = MatrixUtility.RotateAndTranslate(pos, rot); + obj2Wod = Matrix4x4.Translate(new Vector3(1, 0, 0)) * obj2Wod; + subMeshCount = smr.sharedMesh.subMeshCount; + } + else if (curBodypartRenderer.renderer is MeshRenderer) + { + obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix; + obj2Wod = Matrix4x4.Translate(new Vector3(1, 0, 0)) * obj2Wod; + subMeshCount = curBodypartRenderer.renderer.GetComponent().sharedMesh.subMeshCount; + } + + for (int i = 0; i < subMeshCount; ++i) + { + MaterialEntry mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name); + mat.material.SetColor("_Color", rimColor); + mat.material.SetMatrix("_ObjectToWorld", obj2Wod); + mat.material.SetTexture("_MainTex", curBodypartRenderer.renderer.sharedMaterial.GetTexture("_MainTex")); + cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i); + } + } + + void After(CommandBuffer cb) + { + MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name); + + Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound); + blur.material.SetVector("_TileOffset", tileOffset); + + cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material); + cb.ReleaseTemporaryRT(tempID); + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta new file mode 100644 index 00000000..f0c4f6ab --- /dev/null +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fac41ebc7706eb4abec04ae44602464 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Unit/UnitDetail.cs b/Assets/Scripts/Unit/UnitDetail.cs index 16067425..c57b87b5 100644 --- a/Assets/Scripts/Unit/UnitDetail.cs +++ b/Assets/Scripts/Unit/UnitDetail.cs @@ -151,6 +151,9 @@ public class UnitDetail : MonoBehaviour, IBodyRendererAgent, IBodyJointAgent [Tooltip("残影用的prefab")] public string afterImageAvatarPath; + [Tooltip("Snapshot用的prefab")] + public string snapshotAvatarPath; + UnitBoneDictionary IBodyJointAgent.bones { get { return m_Bones; } } [FormerlySerializedAs("bones")] public UnitBoneDictionary m_Bones; -- cgit v1.1-26-g67d0