summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/Component/UnitCollider.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-08-05 19:34:04 +0800
committerchai <chaifix@163.com>2021-08-05 19:34:04 +0800
commit8d4a4c7c781de11ba3735e8ffb435b23c483af7a (patch)
treeb45ce044e465149e3df5bf1fe77095ea07cfa6ae /Assets/Scripts/Unit/Component/UnitCollider.cs
parent5f9bce715954b5b6e2db1168f0a065cce23f5519 (diff)
*box
Diffstat (limited to 'Assets/Scripts/Unit/Component/UnitCollider.cs')
-rw-r--r--Assets/Scripts/Unit/Component/UnitCollider.cs65
1 files changed, 65 insertions, 0 deletions
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
}