using Unity.Collections;
using Unity.Jobs;
using UnityEngine;
public class ClosestPoint : MonoBehaviour
{
    private void Start()
    {
        var collider = new GameObject().AddComponent<BoxCollider>();
        // Perform a single closest point using ClosestPointCommand and wait for it to complete
        // Set up the command and result buffers
        var results = new NativeArray<Vector3>(1, Allocator.TempJob);
        var commands = new NativeArray<ClosestPointCommand>(1, Allocator.TempJob);
        commands[0] = new ClosestPointCommand(Vector3.one * 5, collider.GetInstanceID(), Vector3.zero, Quaternion.identity, collider.transform.lossyScale);
        // Schedule the batch of closest points
        JobHandle handle = ClosestPointCommand.ScheduleBatch(commands, results, 1, default(JobHandle));
        // Wait for the batch processing job to complete
        handle.Complete();
        // Copy the result. If the point is inside of the Collider, it is returned as a result
        Vector3 closestPoint = results[0];
        // Dispose of the buffers
        results.Dispose();
        commands.Dispose();
    }
}