From 5575843d450870db566b9c275584536299ef40bf Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 11 Sep 2021 13:39:52 +0800 Subject: *afterimage --- Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs | 37 +++++++++++++++++++--- Assets/Scripts/Unit/Controller/UnitController.cs | 6 +++- Assets/Scripts/Unit/TimelineEventProxy.cs | 18 ++++++++++- Assets/Scripts/Unit/UnitParts.cs | 12 ++++++- 4 files changed, 66 insertions(+), 7 deletions(-) (limited to 'Assets/Scripts/Unit') diff --git a/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs b/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs index ce34cb61..ec04f3be 100644 --- a/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs +++ b/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs @@ -2,19 +2,48 @@ using System.Collections.Generic; using UnityEngine; +// 单个残影的参数 +public struct AfterImageAvatarInfo +{ + +} + public class AfterImageAvatar : MonoBehaviour { #region inspector - public Renderer[] renderers; - public Animator animator; + public Animator animator; + #endregion - #endregion + float m_CurTime; + + float m_LifeTime; + + public void Initialize(AfterImageAvatarInfo info) + { + + } - public void Initialized() + public void Initialize(UnitController prototype) { + transform.position = prototype.transform.position; + + animator.runtimeAnimatorController = prototype.unitAnimation.animator.runtimeAnimatorController; + animator.Play(prototype.unitAnimation.baseLayer.stateHash, 0, prototype.unitAnimation.baseLayer.playbackNormalizedTime); + animator.speed = 0.02f; + animator.Update(1 / 60f); + + m_LifeTime = 0.2f; + } + public void Update() + { + m_CurTime += Time.deltaTime; + if (m_CurTime > m_LifeTime) + { + GameObject.Destroy(this.gameObject); + } } } diff --git a/Assets/Scripts/Unit/Controller/UnitController.cs b/Assets/Scripts/Unit/Controller/UnitController.cs index bbcdc745..384299de 100644 --- a/Assets/Scripts/Unit/Controller/UnitController.cs +++ b/Assets/Scripts/Unit/Controller/UnitController.cs @@ -39,6 +39,8 @@ public class UnitController : MonoBehaviour/*, Interactable*/ public UnitCollider unitCollider; + public UnitParts unitParts; + public GameObject unitObj; // 角色模型 #region 事件监听 @@ -118,7 +120,9 @@ public class UnitController : MonoBehaviour/*, Interactable*/ unitCollider = gameObject.GetOrAddComponent(); unitCollider.Initialize(); - } + + unitParts = gameObject.GetComponentInChildren(); + } public virtual void Update() { diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs index 10dae57d..daa840ad 100644 --- a/Assets/Scripts/Unit/TimelineEventProxy.cs +++ b/Assets/Scripts/Unit/TimelineEventProxy.cs @@ -247,10 +247,26 @@ public partial class TimelineEventProxy void EventMesh_AfterImage(AnimationEventBase animEvent) { +#if UNITY_EDITOR + if (isInEditMode) + return; +#endif EventMesh_AfterImage afterImage = animEvent as EventMesh_AfterImage; if (afterImage == null) return ; - + string avatarPath = owner.unitParts.afterImageAvatarPath; + GameObject go = ResourceManager.Instance.LoadAsset(avatarPath); + if(go) + { + GameObject instance = GameObject.Instantiate(go); + AfterImageAvatar avatar = instance.GetOrAddComponent(); + if(!avatar) + { + GameObject.DestroyImmediate(instance); + return; + } + avatar.Initialize(owner); + } } #endregion diff --git a/Assets/Scripts/Unit/UnitParts.cs b/Assets/Scripts/Unit/UnitParts.cs index a7af9c50..88c9cb23 100644 --- a/Assets/Scripts/Unit/UnitParts.cs +++ b/Assets/Scripts/Unit/UnitParts.cs @@ -2,11 +2,21 @@ using System.Collections.Generic; using UnityEngine; - // 部件 [DisallowMultipleComponent] public class UnitParts : MonoBehaviour { + public enum EUnitPart + { + Sword = 1, + Gun = 2, + LHand = 3, + RHand = 4, + } + + [Tooltip("残影用的prefab")] + public string afterImageAvatarPath; + } -- cgit v1.1-26-g67d0