diff options
author | chai <chaifix@163.com> | 2021-09-28 19:12:34 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-28 19:12:34 +0800 |
commit | 16e4a47beaf7786b63404d4a8356e45d70a393b5 (patch) | |
tree | 15391f9e57cb8d39705bfc13189956262e9e7fe7 /Assets/Scripts | |
parent | 10ea61d63a87931a98c3591735f0d70e10939401 (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.meta | 8 | ||||
-rw-r--r-- | Assets/Scripts/Managers/Physics.meta | 8 | ||||
-rw-r--r-- | Assets/Scripts/Managers/UnitManager.cs | 42 | ||||
-rw-r--r-- | Assets/Scripts/Props.meta | 8 | ||||
-rw-r--r-- | Assets/Scripts/Robot.meta | 8 | ||||
-rw-r--r-- | Assets/Scripts/Unit/AI/Actions.meta | 8 | ||||
-rw-r--r-- | Assets/Scripts/Unit/AI/Conditionals.meta | 8 | ||||
-rw-r--r-- | Assets/Scripts/Unit/AfterImage/UnitSnapshot.cs | 14 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitLensEffect.cs | 3 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Controller/UnitController.cs | 11 | ||||
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs | 42 | ||||
-rw-r--r-- | Assets/Scripts/Unit/UnitSnapshot.cs | 36 | ||||
-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.cs | 20 | ||||
-rw-r--r-- | Assets/Scripts/Utils/ActiveGroup.cs.meta | 11 | ||||
-rw-r--r-- | Assets/Scripts/Utils/TRS.cs | 16 | ||||
-rw-r--r-- | Assets/Scripts/Utils/TRS.cs.meta | 11 |
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: |