summaryrefslogtreecommitdiff
path: root/Assets/Scripts
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
parent10ea61d63a87931a98c3591735f0d70e10939401 (diff)
*unit lens
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/Curve3D.meta (renamed from Assets/Scripts/Scene.meta)2
-rw-r--r--Assets/Scripts/Drone.meta8
-rw-r--r--Assets/Scripts/Managers/Physics.meta8
-rw-r--r--Assets/Scripts/Managers/UnitManager.cs42
-rw-r--r--Assets/Scripts/Props.meta8
-rw-r--r--Assets/Scripts/Robot.meta8
-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
-rw-r--r--Assets/Scripts/Utils/ActiveGroup.cs20
-rw-r--r--Assets/Scripts/Utils/ActiveGroup.cs.meta11
-rw-r--r--Assets/Scripts/Utils/TRS.cs16
-rw-r--r--Assets/Scripts/Utils/TRS.cs.meta11
18 files changed, 204 insertions, 52 deletions
diff --git a/Assets/Scripts/Scene.meta b/Assets/Scripts/Curve3D.meta
index eb7a8716..fef1c5e7 100644
--- a/Assets/Scripts/Scene.meta
+++ b/Assets/Scripts/Curve3D.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: eaee2d0f48cff9b40baf0686a8105600
+guid: ad8b718b6b700d8419838dad07158567
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Scripts/Drone.meta b/Assets/Scripts/Drone.meta
new file mode 100644
index 00000000..694cff70
--- /dev/null
+++ b/Assets/Scripts/Drone.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ec3412151f8a72a41b2ed21316763399
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Managers/Physics.meta b/Assets/Scripts/Managers/Physics.meta
new file mode 100644
index 00000000..2296b3f8
--- /dev/null
+++ b/Assets/Scripts/Managers/Physics.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 603d4624aaedd794cb89497954a83f4a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Managers/UnitManager.cs b/Assets/Scripts/Managers/UnitManager.cs
index 62afc08b..0561abd0 100644
--- a/Assets/Scripts/Managers/UnitManager.cs
+++ b/Assets/Scripts/Managers/UnitManager.cs
@@ -6,11 +6,51 @@ public class UnitManager : Singleton<UnitManager>
{
public PCController pc { get; private set; }
- public List<MonsterController> monsters { get; private set; }
+ public List<MonsterController> monsters { get; private set; }
+ private Dictionary<UnitController, List<UnitSnapshot>> m_Snapshots = new Dictionary<UnitController, List<UnitSnapshot>>();
public void SetPlayerCharacter(PCController pc)
{
this.pc = pc;
}
+
+ public UnitSnapshot ClaimSnapshotSolo(UnitSnapshotInfo info)
+ {
+ UnitSnapshot snapshot = ClaimSnapshot(info.unit);
+ snapshot.ApplySnapshot(info);
+ return snapshot;
+ }
+
+ public UnitSnapshot ClaimSnapshot(UnitController unit)
+ {
+ List<UnitSnapshot> snapshots;
+ UnitSnapshot snap = null;
+ if (m_Snapshots.TryGetValue(unit, out snapshots))
+ {
+ snap = snapshots[snapshots.Count - 1];
+ snapshots.RemoveAt(snapshots.Count - 1);
+ return snap;
+ }
+ var obj = ResourceManager.Instance.LoadAsset<UnitSnapshot>(unit.unitDetail.snapshotAvatarPath);
+ if(obj)
+ {
+ snap = Object.Instantiate<UnitSnapshot>(obj);
+ snap.owner = unit;
+ }
+ return snap;
+ }
+
+ public void ReleaseSnapshot(ref UnitSnapshot snap)
+ {
+ List<UnitSnapshot> snapshots;
+ if (!m_Snapshots.TryGetValue(snap.owner, out snapshots))
+ {
+ snapshots = new List<UnitSnapshot>();
+ m_Snapshots.Add(snap.owner, snapshots);
+ }
+ snapshots.Add(snap);
+ snap = null;
+ }
+
}
diff --git a/Assets/Scripts/Props.meta b/Assets/Scripts/Props.meta
new file mode 100644
index 00000000..bb96602e
--- /dev/null
+++ b/Assets/Scripts/Props.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f299520ed9fcf4a45858ad4ef5a8d5d1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Robot.meta b/Assets/Scripts/Robot.meta
new file mode 100644
index 00000000..0b5a087e
--- /dev/null
+++ b/Assets/Scripts/Robot.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7c09ca1609552d24bbe697d1516f8aa9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
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
diff --git a/Assets/Scripts/Utils/ActiveGroup.cs b/Assets/Scripts/Utils/ActiveGroup.cs
new file mode 100644
index 00000000..bae3a39d
--- /dev/null
+++ b/Assets/Scripts/Utils/ActiveGroup.cs
@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActiveGroup : MonoBehaviour
+{
+ public Object[] members;
+
+ public bool active
+ {
+ get
+ {
+ return true;
+ }
+ set
+ {
+ }
+ }
+
+}
diff --git a/Assets/Scripts/Utils/ActiveGroup.cs.meta b/Assets/Scripts/Utils/ActiveGroup.cs.meta
new file mode 100644
index 00000000..3ccf34ba
--- /dev/null
+++ b/Assets/Scripts/Utils/ActiveGroup.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6391395616b3b234a8dc72ea67aaa400
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Utils/TRS.cs b/Assets/Scripts/Utils/TRS.cs
new file mode 100644
index 00000000..f5d6f559
--- /dev/null
+++ b/Assets/Scripts/Utils/TRS.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public struct TRS
+{
+ public Vector3 position;
+ public Quaternion rotation;
+ public Vector3 scale;
+ public TRS(Vector3 pos, Quaternion rot, Vector3 sc)
+ {
+ position = pos;
+ rotation = rot;
+ scale = sc;
+ }
+}
diff --git a/Assets/Scripts/Utils/TRS.cs.meta b/Assets/Scripts/Utils/TRS.cs.meta
new file mode 100644
index 00000000..f4d46a93
--- /dev/null
+++ b/Assets/Scripts/Utils/TRS.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c2ec12b0e2046b84eac06e01b02937e9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: