From 8d4a4c7c781de11ba3735e8ffb435b23c483af7a Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 5 Aug 2021 19:34:04 +0800 Subject: *box --- Assets/Scripts/Unit/Component/UnitCollider.cs | 65 +++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'Assets/Scripts/Unit/Component/UnitCollider.cs') diff --git a/Assets/Scripts/Unit/Component/UnitCollider.cs b/Assets/Scripts/Unit/Component/UnitCollider.cs index 78757706..2630cb91 100644 --- a/Assets/Scripts/Unit/Component/UnitCollider.cs +++ b/Assets/Scripts/Unit/Component/UnitCollider.cs @@ -2,8 +2,73 @@ using System.Collections.Generic; using UnityEngine; +// 角色当前的碰撞盒 [DisallowMultipleComponent] public class UnitCollider : UnitComponent { + public bool showGizmos; + + public override void Initialize() + { + base.Initialize(); + showGizmos = true; + } + + // 返回当前激活的对应类型的碰撞盒数据 + public ColliderInfo[] GetCurrentBoxesInfoByType(ColliderBox.EColliderType type, UnitAnimation.ELayer layer = UnitAnimation.ELayer.Basic) + { + var layerInfo = m_Owner.unitAnimation.layers[(int)layer]; + AnimationData animData = layerInfo.animationData; + float playbackTime = layerInfo.playbackNomralizedTime * layerInfo.clipInfo[0].clip.length; + //float playbackTime = layerInfo.playbackRealTimeInSeconds; + ColliderInfo[] infos = animData.GetActiveCollidersInfo(type, playbackTime); + return infos; + } + +#if UNITY_EDITOR + + public void OnDrawGizmos() + { + if (!showGizmos) + return; + + Vector3 unitPos = m_Owner.transform.position; + + OnDrawColliders(ColliderBox.EColliderType.HurtBox, Color.green); + OnDrawColliders(ColliderBox.EColliderType.HitBox, Color.red); + } + + void OnDrawColliders(ColliderBox.EColliderType type, Color color) + { + ColliderInfo[] boxes = GetCurrentBoxesInfoByType(type); + if (boxes == null || boxes.Length == 0) + return; + Vector3 unitPos = m_Owner.transform.position; + Quaternion right = Quaternion.Euler(0, 0, 0); + Vector3 fac = new Vector3(1,1, m_Owner.transform.forward.normalized == Vector3.forward ? 1 : -1); + Color oldC = Gizmos.color; + Gizmos.color = color * 0.5f; + for (int i = 0; i < boxes.Length; ++i) + { + var box = boxes[i]; + if (!box.isValid) + continue; + Vector3 localPos = box.position; + Vector3 localSize = box.size; + var pivot = box.pivot; + Vector3 pos = Vector3.zero; // gizmo位置 + switch (pivot) + { + case ColliderBox.Pivot.MiddleBottom: + localPos.y += localSize.y / 2; + break; + } + pos = unitPos + Vector3.Scale(localPos, fac); + Gizmos.DrawCube(pos, localSize); + } + Gizmos.color = oldC; + } + +#endif } -- cgit v1.1-26-g67d0