📕
Motion Warping for Unity
  • 👋Welcome!
  • concept
    • ⭐Introduction
    • ⚙️How this asset works
  • Fundametals
    • 🔸Motion Warping Asset
    • 🔸Motion Warping Component
    • 🔸Warp Providers
    • 🔸Motion Warping IK
  • Components
    • 🔌Mantle Component
    • 🔌Vault Component
    • 🔌Land Component
    • 🔌Roll Component
    • 🔌Align Component
Powered by GitBook
On this page
  • Technical Aspects
  • Example
  1. Fundametals

Warp Providers

In this section you will learn about warp providers.

Technical Aspects

Warp Providers are components that provide active interaction with target points.

Example: the built-in MantleComponent will search for the climbable obstacle point, and then pass it to the Motion Warping component.

This plugin offers a common interface - IWarpProvider - that can be used to create custom Warp Providers. This interface contains a single method called Interact that returns the result of a check:

WarpProviderInterface.cs
public struct WarpInteractionResult
{
    public WarpPoint[] points;            // Target points.
    public MotionWarpingAsset asset;      // Warping asset with settings.      
    public bool success;                  // If the interaction can be started.

    public bool IsValid()
    {
        return success && points != null && asset != null;
    }
}
    
public interface IWarpPointProvider
{
    public WarpInteractionResult Interact(GameObject instigator);
}

The plugin supports both moving and static obstacles out of the box. Here is how to correctly pass the data for each obstacle type:

Moving obstacles

To make the Warp Point depend on a specific transform, make sure to specify that target transform, and convert the point world coordinates to that transform's space:

result.points = new[]
{
    new WarpPoint()
    {
        transform = hit.transform,
        position = hit.transform.InverseTransformPoint(_targetPosition),
        rotation = Quaternion.Inverse(hit.transform.rotation) * _targetRotation
    }
};
Static obstacles

If you want the Warp Point to be static in world space, make sure to pass the world coordinates of the desired interaction point:

result.points = new[]
{
    new WarpPoint()
    {
        position = _targetPosition,
        rotation = _targetRotation
    }
};

Example

Here is how to use a Warp Provider in code. We are going to use VaultComponent in this example:

public class YourController : MonoBehaviour
{
    //...
    private MotionWarping _warpingComponent;
    //...
    
    //...
    private VaultComponent _vaultComponent;
    //...

    private void Start()
    {
        //...
        _warpingComponent = GetComponent<MotionWarping>();
        //...
    }
        
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.F))
        {
            _warpingComponent.Interact(_vaultComponent);
        }
    }
    
    //...
}

It is also possible to pass the gameObject as a parameter in the Interact method:

_warpingComponent.Interact(gameObject);

In this case, the Motion Warping will try to get the first component that implements the IWarpProvider interface and interact with it.

PreviousMotion Warping ComponentNextMotion Warping IK

Last updated 4 months ago

🔸