From 16e4a47beaf7786b63404d4a8356e45d70a393b5 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 28 Sep 2021 19:12:34 +0800 Subject: *unit lens --- 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 | 3 ++ Assets/Scripts/Unit/Controller/UnitController.cs | 11 +++++- Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs | 42 ++++------------------ Assets/Scripts/Unit/UnitSnapshot.cs | 36 +++++++++++++++++++ Assets/Scripts/Unit/UnitSnapshot.cs.meta | 11 ++++++ 9 files changed, 83 insertions(+), 61 deletions(-) create mode 100644 Assets/Scripts/Unit/AI/Actions.meta create mode 100644 Assets/Scripts/Unit/AI/Conditionals.meta delete mode 100644 Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs delete mode 100644 Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta create mode 100644 Assets/Scripts/Unit/UnitSnapshot.cs create mode 100644 Assets/Scripts/Unit/UnitSnapshot.cs.meta (limited to 'Assets/Scripts/Unit') diff --git a/Assets/Scripts/Unit/AI/Actions.meta b/Assets/Scripts/Unit/AI/Actions.meta new file mode 100644 index 00000000..9b4ad463 --- /dev/null +++ b/Assets/Scripts/Unit/AI/Actions.meta @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000..70a86da5 --- /dev/null +++ b/Assets/Scripts/Unit/AI/Conditionals.meta @@ -0,0 +1,8 @@ +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 deleted file mode 100644 index 8935293a..00000000 --- a/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs +++ /dev/null @@ -1,14 +0,0 @@ -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 deleted file mode 100644 index 31c837aa..00000000 --- a/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -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 f9d22a85..5a68faf8 100644 --- a/Assets/Scripts/Unit/Components/UnitLensEffect.cs +++ b/Assets/Scripts/Unit/Components/UnitLensEffect.cs @@ -99,6 +99,8 @@ public class UnitLensEffect : UnitComponent continue; eff.owner = owner; method.Invoke(eff, new object[] { LensEffectBase.EStage.Before, cb.Value }); + + // iterate unit renderers for (int j = 0; j < body.renderers.Length; ++j) { var renderer = body.renderers[j]; @@ -107,6 +109,7 @@ public class UnitLensEffect : UnitComponent eff.curBodypartRenderer = renderer; method.Invoke(eff, new object[] { LensEffectBase.EStage.Iterate, cb.Value }); } + method.Invoke(eff, new object[] { LensEffectBase.EStage.After, cb.Value }); } MainCamera.Instance.camera.AddCommandBuffer(ce, cb.Value); diff --git a/Assets/Scripts/Unit/Controller/UnitController.cs b/Assets/Scripts/Unit/Controller/UnitController.cs index 3b4ab12d..34490feb 100644 --- a/Assets/Scripts/Unit/Controller/UnitController.cs +++ b/Assets/Scripts/Unit/Controller/UnitController.cs @@ -228,5 +228,14 @@ public class UnitController : MonoBehaviour/*, Interactable*/ transform.position = pos; } -} + // 生成当前的快照 + public UnitSnapshotInfo TakeSnapshot() + { + UnitSnapshotInfo snapshot = new UnitSnapshotInfo(); + snapshot.unit = this; + snapshot.animStateHash = unitAnimation.baseLayer.stateHash; + snapshot.normalizedTime = unitAnimation.baseLayer.playbackNormalizedTime; + return snapshot; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs index 9111bd68..24a62264 100644 --- a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs +++ b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs @@ -10,13 +10,16 @@ public class LensEffect_Dash : LensEffectBase Color rimColor; int tempID; float lifeTime; - UnitSnapshot snapshot; - - public LensEffect_Dash(Color color, float lifeTime) : base() + UnitSnapshot snapshot; + TRS trs; + + public LensEffect_Dash(TRS trs, Color color, float lifeTime, UnitSnapshotInfo snapshot) : base() { rimColor = color; tempID = Shader.PropertyToID("_BlurRim_RT0"); this.lifeTime = lifeTime; + this.snapshot = UnitManager.Instance.ClaimSnapshotSolo(snapshot); + this.trs = trs; } public override void AfterForwardOpaque(EStage stage, CommandBuffer cb) @@ -25,10 +28,6 @@ public class LensEffect_Dash : LensEffectBase { Before(cb); } - else if (stage == EStage.Iterate) - { - Iterate(cb); - } else if (stage == EStage.After) { After(cb); @@ -43,36 +42,9 @@ public class LensEffect_Dash : LensEffectBase 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; - } + // renderer - 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) diff --git a/Assets/Scripts/Unit/UnitSnapshot.cs b/Assets/Scripts/Unit/UnitSnapshot.cs new file mode 100644 index 00000000..0515bf6f --- /dev/null +++ b/Assets/Scripts/Unit/UnitSnapshot.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// 保存当前角色的快照 +public struct UnitSnapshotInfo +{ + public UnitController unit; + + public int animStateHash; + + public float normalizedTime; + + public TRS trs; + +} + +// 角色快照,用于lens effect +public class UnitSnapshot : MonoBehaviour +{ + public UnitController owner; + public Animator animator; + + public void Initialize(UnitController prototype) + { + animator.runtimeAnimatorController = prototype.unitAnimation.animator.runtimeAnimatorController; + } + + public void ApplySnapshot(UnitSnapshotInfo info) + { + animator.Play(info.animStateHash, 0, info.normalizedTime); + animator.speed = 0.02f; + animator.Update(1 / 60f); + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Unit/UnitSnapshot.cs.meta b/Assets/Scripts/Unit/UnitSnapshot.cs.meta new file mode 100644 index 00000000..31c837aa --- /dev/null +++ b/Assets/Scripts/Unit/UnitSnapshot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d63b30ef896f0a548865db54d2bdbbeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.1-26-g67d0