From ad950c25abdf7f5a2f0428863d4035e9eb168fd5 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 15 Sep 2021 09:23:46 +0800 Subject: *misc --- Assets/Scripts/Unit/Controller/UnitController.cs | 4 +- .../Scripts/Unit/Editor/UnitDictionariesDrawer.cs | 5 + .../Unit/Editor/UnitDictionariesDrawer.cs.meta | 11 ++ Assets/Scripts/Unit/Events/EventEffect.cs | 6 +- Assets/Scripts/Unit/TimelineEventProxy.cs | 2 +- Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs | 15 ++- Assets/Scripts/Unit/UnitDetail.cs | 117 +++++++++++++++++++++ Assets/Scripts/Unit/UnitDetail.cs.meta | 11 ++ Assets/Scripts/Unit/UnitParts.cs | 22 ---- Assets/Scripts/Unit/UnitParts.cs.meta | 11 -- 10 files changed, 165 insertions(+), 39 deletions(-) create mode 100644 Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs create mode 100644 Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs.meta create mode 100644 Assets/Scripts/Unit/UnitDetail.cs create mode 100644 Assets/Scripts/Unit/UnitDetail.cs.meta delete mode 100644 Assets/Scripts/Unit/UnitParts.cs delete mode 100644 Assets/Scripts/Unit/UnitParts.cs.meta (limited to 'Assets/Scripts/Unit') diff --git a/Assets/Scripts/Unit/Controller/UnitController.cs b/Assets/Scripts/Unit/Controller/UnitController.cs index 384299de..3c09e5e6 100644 --- a/Assets/Scripts/Unit/Controller/UnitController.cs +++ b/Assets/Scripts/Unit/Controller/UnitController.cs @@ -39,7 +39,7 @@ public class UnitController : MonoBehaviour/*, Interactable*/ public UnitCollider unitCollider; - public UnitParts unitParts; + public UnitDetail unitDetail; public GameObject unitObj; // 角色模型 @@ -121,7 +121,7 @@ public class UnitController : MonoBehaviour/*, Interactable*/ unitCollider = gameObject.GetOrAddComponent(); unitCollider.Initialize(); - unitParts = gameObject.GetComponentInChildren(); + unitDetail = gameObject.GetComponentInChildren(); } public virtual void Update() diff --git a/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs b/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs new file mode 100644 index 00000000..d56c9f36 --- /dev/null +++ b/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs @@ -0,0 +1,5 @@ +using UnityEditor; + +[CustomPropertyDrawer(typeof(UnitBoneDictionary))] +public class UnitBoneDictionaryDrawer : SerializableDictionaryPropertyDrawer { } + diff --git a/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs.meta b/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs.meta new file mode 100644 index 00000000..4a92e024 --- /dev/null +++ b/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8850261fe4c29b442a0e3b613e07597e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Unit/Events/EventEffect.cs b/Assets/Scripts/Unit/Events/EventEffect.cs index 347b92f5..1369e7b0 100644 --- a/Assets/Scripts/Unit/Events/EventEffect.cs +++ b/Assets/Scripts/Unit/Events/EventEffect.cs @@ -6,6 +6,7 @@ public class EventEffect : AnimationEventBase { Unit, Bone, + PresetBone, } public override TimelineEventProxy.EEventType type { get { return TimelineEventProxy.EEventType.EventEffect; } } @@ -21,7 +22,10 @@ public class EventEffect : AnimationEventBase public EAttachNode attachNode = EAttachNode.Unit; [When("attachNode", EAttachNode.Bone), Tooltip("Bone path attach to")] - public string bone; + public string bonePath; + + [When("attachNode", EAttachNode.PresetBone), Tooltip("Preset unit bone defined in unit details")] + public EUnitBone bone; [Tooltip("Position offset")] public Vector3 position; diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs index de6e6b0b..70e454ba 100644 --- a/Assets/Scripts/Unit/TimelineEventProxy.cs +++ b/Assets/Scripts/Unit/TimelineEventProxy.cs @@ -81,7 +81,7 @@ public partial class TimelineEventProxy private Transform m_Root; - private Transform m_UnitModel; // 模型的Unit,默认是m_Root的第一个子节点 + private Transform m_UnitModel; // 模型的Unit prefab,默认是m_Root的第一个子节点 public UnitController owner { get; private set; } diff --git a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs index 119cf105..adc4fe3e 100644 --- a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs +++ b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs @@ -41,7 +41,18 @@ public partial class TimelineEventProxy { if (m_UnitModel != null) { - info.rootTr = m_UnitModel.Find(effect.bone); + info.rootTr = m_UnitModel.Find(effect.bonePath); + } + } + else if(effect.attachNode == global::EventEffect.EAttachNode.PresetBone) + { + if(m_UnitModel != null) + { + UnitDetail detail = m_UnitModel.GetComponent(); + if(detail) + { + info.rootTr = detail.GetBone(effect.bone); + } } } } @@ -122,7 +133,7 @@ public partial class TimelineEventProxy EventMesh_AfterImage afterImage = animEvent as EventMesh_AfterImage; if (afterImage == null) return; - string avatarPath = owner.unitParts.afterImageAvatarPath; + string avatarPath = owner.unitDetail.afterImageAvatarPath; GameObject go = ResourceManager.Instance.LoadAsset(avatarPath); if (go) { diff --git a/Assets/Scripts/Unit/UnitDetail.cs b/Assets/Scripts/Unit/UnitDetail.cs new file mode 100644 index 00000000..30a98c63 --- /dev/null +++ b/Assets/Scripts/Unit/UnitDetail.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public enum EUnitBone +{ + Hips = 0, // 盆骨 + Spine , // 脊柱 + Chest , // 胸腔 + UpperChest , // + Neck , + Head , + LEye , + REye , + Jaw , + + LShoulder = 20, + LUpperArm, + LLowerArm, + LHand, + LFinger00, + LFinger01, + LFinger02, + LFinger10, + LFinger11, + LFinger12, + LFinger20, + LFinger21, + LFinger22, + LFinger30, + LFinger31, + LFinger32, + LFinger40, + LFinger41, + LFinger42, + + RShoulder = 40, + RUpperArm, + RLowerArm, + RHand, + RFinger00, + RFinger01, + RFinger02, + RFinger10, + RFinger11, + RFinger12, + RFinger20, + RFinger21, + RFinger22, + RFinger30, + RFinger31, + RFinger32, + RFinger40, + RFinger41, + RFinger42, + + LUpperLeg = 60, // 大腿 + LLowerLeg, // 小腿肚 + LFoot, // 左脚 + LToes, // 脚趾 + LToe0, // 脚趾0 + LToe1, // 脚趾1 + LToe2, // 脚趾2 + LToe3, // 脚趾3 + LToe4, // 脚趾4 + + RUpperLeg = 80, // 大腿 + RLowerLeg, // 小腿肚 + RFoot, // 左脚 + RToes, // 脚趾 + RToe0, // 脚趾0 + RToe1, // 脚趾1 + RToe2, // 脚趾2 + RToe3, // 脚趾3 + RToe4, // 脚趾4 + +} + +[Serializable] +public class UnitBoneDictionary : SerializableDictionary { } + +// 角色的prefab附加数据 +// * afterimage的prefab +// * 骨骼映射 +// * 武器 +[DisallowMultipleComponent] +public class UnitDetail : MonoBehaviour +{ + [Tooltip("残影用的prefab")] + public string afterImageAvatarPath; + + public UnitBoneDictionary bones; + + //[ExecuteInEditMode] + public UnitDetail() + { + bones = new UnitBoneDictionary(); + foreach(EUnitBone e in Enum.GetValues(typeof(EUnitBone))) + { + bones.Add(e, null); + } + } + + public Transform GetBone(EUnitBone bone) + { + if (bones.ContainsKey(bone)) + return bones[bone]; + return null; + } + + public bool HasBone(EUnitBone bone) + { + return bones.ContainsKey(bone); + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Unit/UnitDetail.cs.meta b/Assets/Scripts/Unit/UnitDetail.cs.meta new file mode 100644 index 00000000..f004ea18 --- /dev/null +++ b/Assets/Scripts/Unit/UnitDetail.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75a2e2ebdc58ab940858d821f8a1ffa0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Unit/UnitParts.cs b/Assets/Scripts/Unit/UnitParts.cs deleted file mode 100644 index 88c9cb23..00000000 --- a/Assets/Scripts/Unit/UnitParts.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -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; - - - -} diff --git a/Assets/Scripts/Unit/UnitParts.cs.meta b/Assets/Scripts/Unit/UnitParts.cs.meta deleted file mode 100644 index c95d5fdb..00000000 --- a/Assets/Scripts/Unit/UnitParts.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 19d4fad3ce933bf45a32ff4d0d7e328a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: -- cgit v1.1-26-g67d0