Unity3D Vive throw objects when let go of
<p>I am attempting to make a physics sandbox-type game for the Vive, but the velocity of an object is completely reset and just begins falling when you let go of an object you were previously holding, making throwing impossible.
The system I am using currently will disable gravity on an object, and disable colliders of on an object when you pick it up. It will also child the object to your controller, making it like holding the object. When you let go of the button to release the object, it will enable gravity, enable colliders, and then set its parent object to null. This works to pick up and release an object, but it does not work at all for throwing objects. I have played around with timing and order of the components of the code, and nothing works.
Is there any way to find the velocity of an object and the directional velocity, without the object using gravity? Velocity doesn't work if gravity is disabled.</p>

<p>Here is my code:</p>

<pre><code>using UnityEngine;
using System.Collections;

public class WandController : MonoBehaviour
{
//Basic Controller tracking stuff
private Valve.VR.EVRButtonId gripButton = Valve.VR.EVRButtonId.k_EButton_Grip;
public bool gripButtonDown = false;
public bool gripButtonUp = false;
public bool gripButtonPressed = false;

private Valve.VR.EVRButtonId triggerButton = Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger;
public bool triggerButtonDown = false;
public bool triggerButtonUp = false;
public bool triggerButtonPressed = false;

private SteamVR_Controller.Device controller { get { return SteamVR_Controller.Input((int)trackedObj.index); } }
private SteamVR_TrackedObject trackedObj;

//Game Variables
public GameObject wouldSelect; //What is in the select zone, has tiny script for the zone that sets the newest triggerenter to this variable
public GameObject isHolding; //When you hold something, it goes from wouldselect to isholding
public bool holding = false;
public GameObject holdingZone; //The holding zone, also where objects go if they are picked up

// Use this for initialization
void Start()
{
    trackedObj = GetComponent&lt;SteamVR_TrackedObject&gt;();
}

// Update is called once per frame
void Update()
{
    //Basic Controller configuration  &amp; button management stuff
    if (controller == null)
    {
        Debug.Log("Controller not initialized");
        return;
    }
    gripButtonDown = controller.GetPressDown(gripButton);
    gripButtonUp = controller.GetPressUp(gripButton);
    gripButtonPressed = controller.GetPress(gripButton);

    triggerButtonDown = controller.GetPressDown(triggerButton);
    triggerButtonUp = controller.GetPressUp(triggerButton);
    triggerButtonPressed = controller.GetPress(triggerButton);
    if (gripButtonDown)
    {
        Debug.Log("Grip Button was just pressed");
    }
    if (gripButtonUp)
    {
        Debug.Log("Grip Button was just unpressed");
    }
    if (triggerButtonDown)
    {
        Debug.Log("Trigger Button was just pressed");
    }
    if (triggerButtonUp)
    {
        Debug.Log("Trigger Button was just unpressed");
    }

    //Calling void that allows you to grab
    CanGrab();
}

void CanGrab ()
{
    if(wouldSelect != null &amp;&amp; wouldSelect.tag == "Object" &amp;&amp; triggerButtonDown == true &amp;&amp; holding == false)
    {
        wouldSelect.GetComponent&lt;Collider&gt;().enabled = false;
        wouldSelect.GetComponent&lt;Rigidbody&gt;().useGravity = false;
        isHolding = wouldSelect;
        wouldSelect.transform.SetParent(this.transform);
        wouldSelect.transform.position = holdingZone.transform.position;
        holding = true;
    }
    if(holding == true &amp;&amp; triggerButtonUp == true)
    {
        wouldSelect.GetComponent&lt;Collider&gt;().enabled = true;
        isHolding.GetComponent&lt;Rigidbody&gt;().useGravity = true;
        isHolding.transform.SetParent(null);
        holding = false;
        wouldSelect = null;
        isHolding = null;
    }
}
}
</code></pre>