From 5575843d450870db566b9c275584536299ef40bf Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 11 Sep 2021 13:39:52 +0800 Subject: *afterimage --- .../Unit/PC/Erika/Prefabs/Erika_Robot.prefab | 14 ++++++++ .../PC/Erika/Prefabs/Erika_Robot_AfterImage.prefab | 2 +- 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 ++++++- 6 files changed, 81 insertions(+), 8 deletions(-) diff --git a/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot.prefab b/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot.prefab index 48d2cff5..73baeb6d 100644 --- a/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot.prefab +++ b/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot.prefab @@ -592,6 +592,7 @@ GameObject: m_Component: - component: {fileID: 6930345995811640846} - component: {fileID: 7023111129766813114} + - component: {fileID: 1704775273} m_Layer: 0 m_Name: Erika_Robot m_TagString: Untagged @@ -635,6 +636,19 @@ Animator: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1704775273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6928033330946439154} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 19d4fad3ce933bf45a32ff4d0d7e328a, type: 3} + m_Name: + m_EditorClassIdentifier: + afterImageAvatarPath: Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_AfterImage.prefab --- !u!1 &6928056367075676882 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_AfterImage.prefab b/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_AfterImage.prefab index 0c9b4f45..508a3826 100644 --- a/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_AfterImage.prefab +++ b/Assets/Bundle/Unit/PC/Erika/Prefabs/Erika_Robot_AfterImage.prefab @@ -433,7 +433,7 @@ Transform: m_GameObject: {fileID: 6928033330946439154} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 3.54, y: 3.34, z: -12.52} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalScale: {x: 0.7, y: 0.7, z: 0.7} m_Children: - {fileID: 6930312115733728132} - {fileID: 6930221487356679114} 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