_warpingComponent.Interact(provider), the provider runs its detection logic and returns all the data the system needs to begin warping.
The IWarpPointProvider Interface
All Warp Providers implement theIWarpPointProvider interface, which declares a single method — Interact. You can implement this interface on any MonoBehaviour to create a fully custom provider.
The system also uses a WarpInteractionResult struct to package the provider’s output:
IsValid() helper checks all three conditions: the interaction was found, at least one target point exists, and a warping asset is assigned. The MotionWarping component calls IsValid() on the result before starting any warping — if it returns false, the interaction is silently skipped.
Supplying Target Points
The way you populateresult.points depends on whether the obstacle is moving or static.
Static obstacles
For obstacles that do not move (walls, fixed ledges, parked vehicles), pass world-space coordinates directly:Moving obstacles
For obstacles that move at runtime (moving platforms, vehicles in transit, enemies), you must attach the warp point to the obstacle’s transform. Convert the world-space target position into the obstacle’s local space usingInverseTransformPoint, and convert the rotation into the obstacle’s local space using Quaternion.Inverse:
Always use the local-space conversion when the obstacle can move between the time the interaction starts and the time it ends. Using raw world coordinates on a moving obstacle causes the character to drift away from the target mid-warp.
Using a Warp Provider in Code
The example below shows how to trigger a vault interaction using the built-inVaultComponent as the provider. Call _warpingComponent.Interact(provider) in response to player input:
Passing a GameObject instead of a component reference
If you do not have a direct reference to the provider component, you can pass the obstacle’sGameObject to Interact. The system will search for the first component on that object implementing IWarpPointProvider and call it automatically:
GameObject references (for example, from raycasts or trigger zones) without needing to know the specific provider type.
Implementing a Custom Warp Provider
To create your own provider, implementIWarpPointProvider on a MonoBehaviour attached to the obstacle or the character:
