summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-09-28 19:12:34 +0800
committerchai <chaifix@163.com>2021-09-28 19:12:34 +0800
commit16e4a47beaf7786b63404d4a8356e45d70a393b5 (patch)
tree15391f9e57cb8d39705bfc13189956262e9e7fe7 /Assets/Scripts/Unit
parent10ea61d63a87931a98c3591735f0d70e10939401 (diff)
*unit lens
Diffstat (limited to 'Assets/Scripts/Unit')
-rw-r--r--Assets/Scripts/Unit/AI/Actions.meta8
-rw-r--r--Assets/Scripts/Unit/AI/Conditionals.meta8
-rw-r--r--Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs14
-rw-r--r--Assets/Scripts/Unit/Components/UnitLensEffect.cs3
-rw-r--r--Assets/Scripts/Unit/Controller/UnitController.cs11
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs42
-rw-r--r--Assets/Scripts/Unit/UnitSnapshot.cs36
-rw-r--r--Assets/Scripts/Unit/UnitSnapshot.cs.meta (renamed from Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta)0
8 files changed, 72 insertions, 50 deletions
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/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<MeshFilter>().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/AfterImage/UnitSnapshot.cs.meta b/Assets/Scripts/Unit/UnitSnapshot.cs.meta
index 31c837aa..31c837aa 100644
--- a/Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs.meta
+++ b/Assets/Scripts/Unit/UnitSnapshot.cs.meta