diff --git a/Assets/Code/Scripts/Interaction/SlidingDoor.cs b/Assets/Code/Scripts/Interaction/SlidingDoor.cs index d18d9b4..3b8f82c 100644 --- a/Assets/Code/Scripts/Interaction/SlidingDoor.cs +++ b/Assets/Code/Scripts/Interaction/SlidingDoor.cs @@ -7,7 +7,7 @@ public class SlidingDoor : MonoBehaviour public enum SlideDirection { Positive = 1, Negative = -1 } [Header("Slide Settings")] - [Tooltip("Local axis the door slides along.")] + [Tooltip("Axis in parent space (or world space if no parent) the door slides along.")] [SerializeField] private SlideAxis axis = SlideAxis.X; [Tooltip("Which way along the axis the door opens.")] @@ -36,7 +36,7 @@ public class SlidingDoor : MonoBehaviour private void Awake() { m_closedPos = transform.localPosition; - m_openPos = m_closedPos + GetSlideVector() * slideDistance; + m_openPos = m_closedPos + GetParentSpaceSlideVector() * slideDistance; if (startOpen) { @@ -86,7 +86,7 @@ public class SlidingDoor : MonoBehaviour Open(); } - private Vector3 GetSlideVector() + private Vector3 GetParentSpaceSlideVector() { float sign = (float)direction; return axis switch @@ -98,14 +98,19 @@ public class SlidingDoor : MonoBehaviour }; } + private Vector3 GetWorldSpaceSlideVector() + { + return transform.parent != null + ? transform.parent.TransformDirection(GetParentSpaceSlideVector()).normalized + : GetParentSpaceSlideVector().normalized; + } + #if UNITY_EDITOR private void OnDrawGizmos() { - Vector3 worldClosed = transform.parent != null - ? transform.parent.TransformPoint(transform.localPosition) - : transform.position; + Vector3 worldClosed = transform.position; - Vector3 slideVec = transform.TransformDirection(GetSlideVector()) * slideDistance; + Vector3 slideVec = GetWorldSpaceSlideVector() * slideDistance; Gizmos.color = Color.cyan; Gizmos.DrawLine(worldClosed, worldClosed + slideVec); Gizmos.DrawWireSphere(worldClosed + slideVec, 0.08f);