diff options
author | chai <chaifix@163.com> | 2021-09-29 19:55:57 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-29 19:55:57 +0800 |
commit | 61d6e9bf192ffa54abc57bab69b1bd88c3b8d62b (patch) | |
tree | 47071b43d583ced63b1b6cc4a9e4c2c6100ffe3f /Assets/Scripts | |
parent | 16e4a47beaf7786b63404d4a8356e45d70a393b5 (diff) |
*misc
Diffstat (limited to 'Assets/Scripts')
-rw-r--r-- | Assets/Scripts/Data/EnumDefine.cs | 2 | ||||
-rw-r--r-- | Assets/Scripts/Data/StaticDefine.cs | 5 | ||||
-rw-r--r-- | Assets/Scripts/Managers/UnitManager.cs | 4 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitLensEffect.cs | 24 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitState/PCState.cs | 7 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Controller/UnitController.cs | 21 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs | 12 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Events/EventMesh_LensEffect_Dash.cs.meta | 11 | ||||
-rw-r--r-- | Assets/Scripts/Unit/LensEffect/LensEffect_Dash.cs | 38 | ||||
-rw-r--r-- | Assets/Scripts/Unit/TimelineEventProxy.cs | 3 | ||||
-rw-r--r-- | Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs | 17 | ||||
-rw-r--r-- | Assets/Scripts/Unit/UnitSnapshot.cs | 23 |
12 files changed, 142 insertions, 25 deletions
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 +}
|