diff --git a/Runtime/Gizmos/DebugX.lines.cs b/Runtime/Gizmos/DebugX.lines.cs index 4c3405f..9016e2b 100644 --- a/Runtime/Gizmos/DebugX.lines.cs +++ b/Runtime/Gizmos/DebugX.lines.cs @@ -292,8 +292,7 @@ namespace DCFApixels [IN(LINE)] private DrawHandler LineWireCapsule_Internal(Vector3 startPoint1, Vector3 startPoint2, Vector3 startCenter, Vector3 end, float radius) { - Quaternion rotation = Quaternion.LookRotation(startPoint2 - startPoint1, Vector3.up); - rotation = rotation * Quaternion.Euler(90, 0, 0); + Quaternion rotation = Quaternion.LookRotation(startPoint2 - startPoint1, Vector3.up) * _rot_x_90; LineWireCapsule(startCenter, end, rotation, radius, Vector3.Distance(startPoint1, startPoint2) + radius * 2f); return this; } diff --git a/Runtime/Gizmos/DebugX.primitives.cs b/Runtime/Gizmos/DebugX.primitives.cs index 1b9067a..7a08311 100644 --- a/Runtime/Gizmos/DebugX.primitives.cs +++ b/Runtime/Gizmos/DebugX.primitives.cs @@ -14,6 +14,8 @@ namespace DCFApixels { public readonly partial struct DrawHandler { + private static Quaternion _rot_x_90 = Quaternion.Euler(90, 0, 0); + #region BillboardCircle [IN(LINE)] public DrawHandler BillboardCircle(Vector3 position, float radius) @@ -300,6 +302,13 @@ namespace DCFApixels #region Capsule + public DrawHandler Capsule(Vector3 point1, Vector3 point2, float radius) + where TMat : struct, IStaticMaterial + { + //var norm = Vector3.Cross(Vector3.Normalize(point2 - point1), Vector3.up); + var norm = Vector3.Normalize(point2 - point1); + return Capsule((point1 + point2) * 0.5f, Quaternion.LookRotation(norm, Vector3.up) * _rot_x_90, radius, Vector3.Distance(point1, point2)); + } [IN(LINE)] public DrawHandler Capsule(Vector3 position, Quaternion rotation, float radius, float height) where TMat : struct, IStaticMaterial @@ -316,6 +325,13 @@ namespace DCFApixels return this; } [IN(LINE)] + public DrawHandler Capsule(Vector3 point1, Vector3 point2, float radius) + { + //var norm = Vector3.Cross(Vector3.Normalize(point2 - point1), Vector3.up); + var norm = Vector3.Normalize(point2 - point1); + return Capsule((point1 + point2) * 0.5f, Quaternion.LookRotation(norm, Vector3.up) * _rot_x_90, radius, Vector3.Distance(point1, point2)); + } + [IN(LINE)] public DrawHandler Capsule(Vector3 position, Quaternion rotation, float radius, float height) { return Capsule(position, rotation, radius, height); @@ -325,8 +341,9 @@ namespace DCFApixels #region WireCapsule public DrawHandler WireCapsule(Vector3 point1, Vector3 point2, float radius) { - //TODO посмотреть поворот - return WireCapsule((point1 + point2) * 0.5f, Quaternion.LookRotation(point2 - point1), radius, Vector3.Distance(point1, point2)); + //var norm = Vector3.Cross(Vector3.Normalize(point2 - point1), Vector3.up); + var norm = Vector3.Normalize(point2 - point1); + return WireCapsule((point1 + point2) * 0.5f, Quaternion.LookRotation(norm, Vector3.up) * _rot_x_90, radius, Vector3.Distance(point1, point2)); } public DrawHandler WireCapsule(Vector3 position, Quaternion rotation, float radius, float height) { diff --git a/Runtime/Gizmos/DebugX.raycasts.cs b/Runtime/Gizmos/DebugX.raycasts.cs index 74738a9..9780ff2 100644 --- a/Runtime/Gizmos/DebugX.raycasts.cs +++ b/Runtime/Gizmos/DebugX.raycasts.cs @@ -100,8 +100,7 @@ namespace DCFApixels public DrawHandler CapsuleCast(Vector3 point1, Vector3 point2, Vector3 direction, float radius, RaycastHit hit) { Vector3 center = (point1 + point2) * 0.5f; - Quaternion rotation = Quaternion.LookRotation(point2 - point1, Vector3.up); - rotation = rotation * Quaternion.Euler(90, 0, 0); + Quaternion rotation = Quaternion.LookRotation(point2 - point1, Vector3.up) * _rot_x_90; CapsuleCast(center, direction, rotation, radius, Vector3.Distance(point1, point2) + radius * 2f, hit); return this; }