summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-09-29 19:55:57 +0800
committerchai <chaifix@163.com>2021-09-29 19:55:57 +0800
commit61d6e9bf192ffa54abc57bab69b1bd88c3b8d62b (patch)
tree47071b43d583ced63b1b6cc4a9e4c2c6100ffe3f
parent16e4a47beaf7786b63404d4a8356e45d70a393b5 (diff)
*misc
-rw-r--r--Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader83
-rw-r--r--Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader.meta9
-rw-r--r--Assets/Bundle/Shaders/Common/common_solid_color.shader2
-rw-r--r--Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_1.asset28
-rw-r--r--Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_Snapshot.prefab15
-rw-r--r--Assets/Scripts/Data/EnumDefine.cs2
-rw-r--r--Assets/Scripts/Data/StaticDefine.cs5
-rw-r--r--Assets/Scripts/Managers/UnitManager.cs4
-rw-r--r--Assets/Scripts/Unit/Components/UnitLensEffect.cs24
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState.cs7
-rw-r--r--Assets/Scripts/Unit/Controller/UnitController.cs21
-rw-r--r--Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs12
-rw-r--r--Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs.meta11
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs38
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy.cs3
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs17
-rw-r--r--Assets/Scripts/Unit/UnitSnapshot.cs23
17 files changed, 271 insertions, 33 deletions
diff --git a/Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader b/Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader
new file mode 100644
index 00000000..702bbd4b
--- /dev/null
+++ b/Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader
@@ -0,0 +1,83 @@
+// 高斯模糊
+
+Shader "Erika/Common/Image/MotionBlur"
+{
+ Properties
+ {
+ _MainTex("Texture", 2D) = "white" {}
+ _Angle("Angle", float) = 0
+ _Distance("Distance", float) = 0
+ _TileOffset("TileOffset", Vector) = (1,1,0,0)
+ _Iterate("Iterate Count", float) = 1
+ }
+
+ SubShader
+ {
+ Tags { "RenderType" = "Opaque" "Queue" = "Transparent-1"}
+ LOD 100
+
+ ZWrite Off
+ ZTest LEqual
+
+ Blend SrcAlpha OneMinusSrcAlpha
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #include "UnityCG.cginc"
+
+ #include "Assets/Bundle/Shaders/Include/ImageEffect.cginc"
+
+ struct v2f
+ {
+ float2 uv : TEXCOORD0;
+ float4 vertex : SV_POSITION;
+ };
+
+ sampler2D _MainTex;
+ float4 _MainTex_ST;
+
+ float _Angle;
+
+ float4 _TileOffset; // 角色的范围
+
+ fixed _Distance;
+
+ float _Iterate; // 迭代次数
+
+ v2f vert(appdata_img v)
+ {
+ v2f o;
+ o.vertex = UnityObjectToClipPos(v.vertex);
+ o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
+ return o;
+ }
+
+ fixed4 frag(v2f i) : SV_Target
+ {
+ _Distance = 0.1;
+
+ fixed2 uv0 = i.uv;
+
+ //fixed4 color = blur(_MainTex, _ScreenParams.xy, uv);
+ fixed4 color = fixed4(0,0,0,0);
+ const float count = 20;
+ float step = _Distance / count;
+ for(int i = 0; i < count; ++i)
+ {
+ fixed2 uv = uv0 + step * i * fixed2(cos(radians(_Angle)), sin(radians(_Angle)));
+ if(uv.x > 1) continue;
+ if(uv.x < 0) continue;
+ color += tex2D(_MainTex, uv) * 1 / count;
+ }
+
+ return color;
+ }
+ ENDCG
+ }
+ }
+
+} // shader
diff --git a/Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader.meta b/Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader.meta
new file mode 100644
index 00000000..cc5320fa
--- /dev/null
+++ b/Assets/Bundle/Shaders/Common/Image/common_img_motionblur.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d68c264cf01a43b4c8503bd7bbe2fbda
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Bundle/Shaders/Common/common_solid_color.shader b/Assets/Bundle/Shaders/Common/common_solid_color.shader
index 92daaa30..69b25500 100644
--- a/Assets/Bundle/Shaders/Common/common_solid_color.shader
+++ b/Assets/Bundle/Shaders/Common/common_solid_color.shader
@@ -71,7 +71,7 @@
if (diff < 0.0001)
{
c = _Color;
- // c = tex2D(_MainTex, i.uv);
+ c = tex2D(_MainTex, i.uv);
}
return c;
diff --git a/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_1.asset b/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_1.asset
index 47959894..8d453722 100644
--- a/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_1.asset
+++ b/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_1.asset
@@ -143,6 +143,20 @@ MonoBehaviour:
angle: 0
distance: 0
hideUnitInMainCamera: 1
+--- !u!114 &114300116509491778
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d52092c3bed6f524ead14801bb72e1c3, type: 3}
+ m_Name: EventMesh_LensEffect_Dash
+ m_EditorClassIdentifier:
+ startFrame: 16
+ lifeTime: 2
--- !u!114 &114435450776992514
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -187,6 +201,20 @@ MonoBehaviour:
position: {x: 0, y: 1.3, z: 0}
rotation: {x: -24.814, y: 33.032, z: -30.331}
scale: {x: 0.4, y: 0.4, z: 0.4}
+--- !u!114 &114532000986298392
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d52092c3bed6f524ead14801bb72e1c3, type: 3}
+ m_Name: EventMesh_LensEffect_Dash
+ m_EditorClassIdentifier:
+ startFrame: 5
+ lifeTime: 2
--- !u!114 &114581710045323768
MonoBehaviour:
m_ObjectHideFlags: 0
diff --git a/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_Snapshot.prefab b/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_Snapshot.prefab
index b3787c3a..6af0e486 100644
--- a/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_Snapshot.prefab
+++ b/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_Snapshot.prefab
@@ -416,9 +416,9 @@ GameObject:
m_Component:
- component: {fileID: 6930345995811640846}
- component: {fileID: 7023111129766813114}
- - component: {fileID: 5696818452860696233}
+ - component: {fileID: 585978181}
m_Layer: 0
- m_Name: Erika_Robot_AfterImage
+ m_Name: Erika_Robot_Snapshot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -453,13 +453,13 @@ Animator:
m_Controller: {fileID: 0}
m_CullingMode: 0
m_UpdateMode: 0
- m_ApplyRootMotion: 1
+ m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorControllerStateOnDisable: 0
---- !u!114 &5696818452860696233
+--- !u!114 &585978181
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -468,12 +468,13 @@ MonoBehaviour:
m_GameObject: {fileID: 6928033330946439154}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 89864711140932040a5827c91d9e5adc, type: 3}
+ m_Script: {fileID: 11500000, guid: d63b30ef896f0a548865db54d2bdbbeb, type: 3}
m_Name:
m_EditorClassIdentifier:
+ owner: {fileID: 0}
+ animator: {fileID: 7023111129766813114}
renderers:
- {fileID: 7046772783541976850}
- animator: {fileID: 7023111129766813114}
--- !u!1 &6928056367075676882
GameObject:
m_ObjectHideFlags: 0
@@ -830,7 +831,7 @@ SkinnedMeshRenderer:
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- - {fileID: 2100000, guid: 8d0d71f453a88c34e8943bd60b65f0fd, type: 2}
+ - {fileID: 2100000, guid: d743391c976d45f41be9ace4cf3bc3ac, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
diff --git a/Assets/Scripts/Data/EnumDefine.cs b/Assets/Scripts/Data/EnumDefine.cs
index ad55986f..decba9c5 100644
--- a/Assets/Scripts/Data/EnumDefine.cs
+++ b/Assets/Scripts/Data/EnumDefine.cs
@@ -14,7 +14,7 @@ public enum EImageEffectMaterails
public enum EShader
{
Blur,
-
+ MotionBlur,
SolidColor,
diff --git a/Assets/Scripts/Data/StaticDefine.cs b/Assets/Scripts/Data/StaticDefine.cs
index 236e0621..ca05d947 100644
--- a/Assets/Scripts/Data/StaticDefine.cs
+++ b/Assets/Scripts/Data/StaticDefine.cs
@@ -18,8 +18,9 @@ public static class StaticDefine
public string path;
}
public static Dictionary<EShader, ShaderDefine> shaders = new Dictionary<EShader, ShaderDefine> {
- { EShader.Blur, new ShaderDefine("Erika/Common/Image/Blur", "")},
- { EShader.SolidColor, new ShaderDefine("Erika/Common/SolidColor", "") },
+ { EShader.Blur, new ShaderDefine("Erika/Common/Image/Blur", "")},
+ { EShader.MotionBlur, new ShaderDefine("Erika/Common/Image/MotionBlur", "")},
+ { EShader.SolidColor, new ShaderDefine("Erika/Common/SolidColor", "") },
};
public static string bundleManifest = "bundles"; // Assets/Resources/bundles.json
diff --git a/Assets/Scripts/Managers/UnitManager.cs b/Assets/Scripts/Managers/UnitManager.cs
index 0561abd0..0d43f60f 100644
--- a/Assets/Scripts/Managers/UnitManager.cs
+++ b/Assets/Scripts/Managers/UnitManager.cs
@@ -36,7 +36,9 @@ public class UnitManager : Singleton<UnitManager>
if(obj)
{
snap = Object.Instantiate<UnitSnapshot>(obj);
- snap.owner = unit;
+ snap.gameObject.hideFlags = HideFlags.HideInHierarchy | HideFlags.DontSave;
+ snap.Initialize(unit);
+ snap.active = false;
}
return snap;
}
diff --git a/Assets/Scripts/Unit/Components/UnitLensEffect.cs b/Assets/Scripts/Unit/Components/UnitLensEffect.cs
index 5a68faf8..7758c943 100644
--- a/Assets/Scripts/Unit/Components/UnitLensEffect.cs
+++ b/Assets/Scripts/Unit/Components/UnitLensEffect.cs
@@ -77,6 +77,9 @@ public class UnitLensEffect : UnitComponent
private void OnWillRenderUnit()
{
+ if (m_Effects == null || m_Effects.Count == 0)
+ return;
+
PrepareCommandBuffers();
IBodyRendererAgent body = owner.unitRender.body;
@@ -116,8 +119,11 @@ public class UnitLensEffect : UnitComponent
}
}
- private void OnRenderUnit()
- {
+ private void OnRenderUnit()
+ {
+ if (m_Effects == null || m_Effects.Count == 0)
+ return;
+
// 执行每个event的finish
foreach (var cb in m_InUseCommandBuffers)
{
@@ -148,9 +154,6 @@ public class UnitLensEffect : UnitComponent
CameraEvent ce = cb.Key.ToCameraEvent();
MainCamera.Instance.camera.RemoveCommandBuffer(ce, cb.Value);
}
- var temp = m_CachedCommandBuffers;
- m_CachedCommandBuffers = m_InUseCommandBuffers;
- m_InUseCommandBuffers = temp;
}
private void OnWillRenderObj(BodyPartRenderer renderer)
@@ -163,6 +166,12 @@ public class UnitLensEffect : UnitComponent
void PrepareCommandBuffers()
{
+ if(m_InUseCommandBuffers.Count != 0)
+ {
+ var temp = m_CachedCommandBuffers;
+ m_CachedCommandBuffers = m_InUseCommandBuffers;
+ m_InUseCommandBuffers = temp;
+ }
ERenderingEvent usedEvent = ERenderingEvent.None;
for (int i = 0; i < m_Effects.Count; ++i)
{
@@ -207,4 +216,9 @@ public class UnitLensEffect : UnitComponent
cb = null;
}
+ public void AddEffect(LensEffectBase effect)
+ {
+ m_Effects.Add(effect);
+ }
+
}
diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState.cs b/Assets/Scripts/Unit/Components/UnitState/PCState.cs
index 060d6e91..e545dea0 100644
--- a/Assets/Scripts/Unit/Components/UnitState/PCState.cs
+++ b/Assets/Scripts/Unit/Components/UnitState/PCState.cs
@@ -139,9 +139,14 @@ public partial class PCState : UnitState
bool TryTeleport()
{
if (Input.GetKeyDown("i"))
- //if (InputManager.Instance.TryCommand(0.5f, KeyCode.I))
{
float offset = owner.isTowardRight ? 1.5f : -1.5f;
+
+ UnitSnapshotInfo info = owner.TakeSnapshot();
+ Vector2 dir = TestErika.Instance.monster.owner.center + new Vector3(offset, -0.5f, 0) - owner.center;
+ LensEffect_Dash dash = new LensEffect_Dash(Color.white, 2, Mathf.Atan2(dir.y, dir.x), info);
+ owner.unitLensEffect.AddEffect(dash);
+
owner.center = TestErika.Instance.monster.owner.center + new Vector3(offset, -0.5f, 0);
TurnAround(!owner.isTowardRight);
return true;
diff --git a/Assets/Scripts/Unit/Controller/UnitController.cs b/Assets/Scripts/Unit/Controller/UnitController.cs
index 34490feb..c75b32b3 100644
--- a/Assets/Scripts/Unit/Controller/UnitController.cs
+++ b/Assets/Scripts/Unit/Controller/UnitController.cs
@@ -42,6 +42,8 @@ public class UnitController : MonoBehaviour/*, Interactable*/
public UnitBody unitBody;
+ public UnitLensEffect unitLensEffect;
+
public GameObject unitObj; // 角色模型
protected List<UnitComponent> unitComponents;
@@ -93,6 +95,18 @@ public class UnitController : MonoBehaviour/*, Interactable*/
}
}
+ public TRS trs
+ {
+ get
+ {
+ TRS trs = new TRS();
+ trs.position = position;
+ trs.rotation = rotation;
+ trs.scale = lossyScale;
+ return trs;
+ }
+ }
+
public virtual Vector3 center
{
get
@@ -166,6 +180,9 @@ public class UnitController : MonoBehaviour/*, Interactable*/
unitRender = GetOrAddUnitComponent<UnitRender>();
unitRender.Initialize();
+ unitLensEffect = GetOrAddUnitComponent<UnitLensEffect>();
+ unitLensEffect.Initialize();
+
unitDetail = gameObject.GetComponentInChildren<UnitDetail>();
}
@@ -194,7 +211,8 @@ public class UnitController : MonoBehaviour/*, Interactable*/
unitAnimation.OnUpdate();
unitSkill.OnUpdate();
unitRootMotion.OnUpdate();
- }
+ unitLensEffect.OnUpdate();
+ }
public virtual void OnDestroy()
{
@@ -232,6 +250,7 @@ public class UnitController : MonoBehaviour/*, Interactable*/
public UnitSnapshotInfo TakeSnapshot()
{
UnitSnapshotInfo snapshot = new UnitSnapshotInfo();
+ snapshot.trs = new TRS(unitObj.transform.position, unitObj.transform.rotation, unitObj.transform.lossyScale);
snapshot.unit = this;
snapshot.animStateHash = unitAnimation.baseLayer.stateHash;
snapshot.normalizedTime = unitAnimation.baseLayer.playbackNormalizedTime;
diff --git a/Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs b/Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs
new file mode 100644
index 00000000..f71d7f5e
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs
@@ -0,0 +1,12 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EventMesh_LensEffect_Dash : AnimationEventBase
+{
+ public override TimelineEventProxy.EEventType type { get { return TimelineEventProxy.EEventType.EventMesh_LensEffect_Dash; } }
+ public override string shortName { get { return "D"; } }
+
+ public float lifeTime;
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs.meta b/Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs.meta
new file mode 100644
index 00000000..7be0b8bf
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d52092c3bed6f524ead14801bb72e1c3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs
index 24a62264..935a7286 100644
--- a/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs
+++ b/Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs
@@ -12,15 +12,17 @@ public class LensEffect_Dash : LensEffectBase
float lifeTime;
UnitSnapshot snapshot;
TRS trs;
+ float angle;
- public LensEffect_Dash(TRS trs, Color color, float lifeTime, UnitSnapshotInfo snapshot) : base()
+ public LensEffect_Dash(Color color, float lifeTime, float angle, UnitSnapshotInfo snapshot) : base()
{
rimColor = color;
tempID = Shader.PropertyToID("_BlurRim_RT0");
this.lifeTime = lifeTime;
+ trs = snapshot.trs;
this.snapshot = UnitManager.Instance.ClaimSnapshotSolo(snapshot);
- this.trs = trs;
- }
+ this.angle = angle;
+ }
public override void AfterForwardOpaque(EStage stage, CommandBuffer cb)
{
@@ -44,17 +46,33 @@ public class LensEffect_Dash : LensEffectBase
cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0));
// renderer
-
- }
+ snapshot.transform.position = trs.position;
+ snapshot.transform.rotation = trs.rotation;
+ snapshot.transform.localScale = trs.scale;
+
+ Matrix4x4 obj2Wod = Matrix4x4.identity;
+ SkinnedMeshRenderer smr = snapshot.renderers[0] as SkinnedMeshRenderer;
+ Vector3 pos = smr.rootBone.transform.position;
+ Quaternion rot = smr.rootBone.transform.rotation;
+ obj2Wod = MatrixUtility.RotateAndTranslate(pos, rot);
+
+ MaterialEntry mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
+ mat.material.SetColor("_Color", rimColor);
+ mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
+ mat.material.SetTexture("_MainTex", snapshot.renderers[0].sharedMaterial.GetTexture("_MainTex"));
+
+ cb.DrawRenderer(snapshot.renderers[0], mat.material);
+ }
void After(CommandBuffer cb)
{
- MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name);
+ MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.MotionBlur].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);
+ Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound);
+ blur.material.SetVector("_TileOffset", tileOffset);
+ blur.material.SetFloat("_Angle", Mathf.Rad2Deg * angle);
+
+ cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material);
cb.ReleaseTemporaryRT(tempID);
}
diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs
index 866c6d3b..437b5b2d 100644
--- a/Assets/Scripts/Unit/TimelineEventProxy.cs
+++ b/Assets/Scripts/Unit/TimelineEventProxy.cs
@@ -55,8 +55,9 @@ public partial class TimelineEventProxy
EventMesh_LensEffect_Bloom, // bloom
EventMesh_LensEffect_MotionBlur, // motionBlur
+ EventMesh_LensEffect_Dash, // dash
- EventMesh_PostEffect_Curly, //
+ EventMesh_PostEffect_Curly, //
EventMesh_AfterImage, // 角色残像
EventMesh_AfterImageStop, // 角色残像停止事件
diff --git a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
index 0bb8df5c..a52e6ea0 100644
--- a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
+++ b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
@@ -184,6 +184,21 @@ public partial class TimelineEventProxy
((PCController)owner).unitImageEffect.ShowGlitch(motionBlur.lifeTime);
}
- #endregion
+ #endregion
+
+ #region Lens Effect
+
+ void EventMesh_LensEffect_Dash(AnimationEventBase animEvent)
+ {
+ EventMesh_LensEffect_Dash dashinfo = animEvent as EventMesh_LensEffect_Dash;
+ if (dashinfo == null)
+ return;
+
+ UnitSnapshotInfo info = owner.TakeSnapshot();
+ LensEffect_Dash dash = new LensEffect_Dash(Color.white, 2, 0, info);
+ owner.unitLensEffect.AddEffect(dash);
+ }
+
+ #endregion
} \ No newline at end of file
diff --git a/Assets/Scripts/Unit/UnitSnapshot.cs b/Assets/Scripts/Unit/UnitSnapshot.cs
index 0515bf6f..f43189cb 100644
--- a/Assets/Scripts/Unit/UnitSnapshot.cs
+++ b/Assets/Scripts/Unit/UnitSnapshot.cs
@@ -18,19 +18,38 @@ public struct UnitSnapshotInfo
// 角色快照,用于lens effect
public class UnitSnapshot : MonoBehaviour
{
+ [HideInInspector]
public UnitController owner;
public Animator animator;
+ public Renderer[] renderers;
+
+ public bool active
+ {
+ get
+ {
+ return this.gameObject.activeSelf;
+ }
+ set
+ {
+ this.gameObject.SetActive(value);
+ }
+ }
public void Initialize(UnitController prototype)
{
+ owner = prototype;
animator.runtimeAnimatorController = prototype.unitAnimation.animator.runtimeAnimatorController;
+ animator.speed = 0;
}
public void ApplySnapshot(UnitSnapshotInfo info)
{
- animator.Play(info.animStateHash, 0, info.normalizedTime);
+ active = true;
animator.speed = 0.02f;
+ animator.Play(info.animStateHash, 0, info.normalizedTime);
animator.Update(1 / 60f);
+ animator.speed = 0;
+ active = false;
}
-} \ No newline at end of file
+}