Oculus OVR Player Controller Zero G Movement?

I am trying to get zero g movement using the oculus ovr controller. Currently this is part of VR Interaction Framework by BNG. I know that the character controller can be made to simulate swimming and even flying, but I cannot get zero g movement out of it. I have tried to add a rigidbody and set it to kinematic and set the character controller movescale = 0 and gravity = 0. That works by suspending the player in the air, allows the player to move around like when on the ground.

So what is my question? My question is, How do I get the velocity of pushing off a gripped object to go to the rigidbody velocity and get zero g movement?

I know that this is possible, but how to make the player use the rigidbody instead of the character controller.

Here is my current code that currently only turns off gravity, but will not make the player move in a zero g atmosphere.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

namespace BNG
{
    public class ZeroG : MonoBehaviour
    {
        OVRPlayerController pControl;
        BNGPlayerController bngController;
        CharacterController characterController;
        public Rigidbody rb;

        public bool GravityEnabled = true;

        private void Start()
        {
            pControl = GameObject.FindGameObjectWithTag("Player").GetComponentInChildren<OVRPlayerController>();
            bngController = GameObject.FindGameObjectWithTag("Player").GetComponent<BNGPlayerController>();
            characterController = GameObject.FindGameObjectWithTag("Player").GetComponentInChildren<CharacterController>();
        }
        void OnTriggerEnter(Collider other)
        {
            if (other.GetComponent<CharacterController>())
            {
                ChangeGravity(false);
                pControl.ZeroG();
                rb.useGravity = false;
                //rb.isKinematic = true;
                float overallSpeed = characterController.velocity.magnitude;
                // Vector3 moveDirection = transform.forward * overallSpeed;
                Vector3 moveDirection = new Vector3(characterController.velocity.x, characterController.velocity.y, characterController.velocity.z);
                //characterController.Move(moveDirection * Time.deltaTime);
                rb.velocity = moveDirection * Time.deltaTime;

            }
            if (other.GetComponent<Rigidbody>() && !other.GetComponent<CharacterController>())
            {
                other.attachedRigidbody.useGravity = false;

            }
        }
        public void ChangeGravity(bool gravityOn)
        {
            GravityEnabled = gravityOn;
            bngController.GravityEnabled = gravityOn;
        }
        void OnTriggerExit(Collider other)
        {

            if (other.GetComponent<CharacterController>())
            {
                ChangeGravity(true);
                pControl.NormalG();
                rb.useGravity = true;
               // rb.isKinematic = true;
            }

            if (other.GetComponent<Rigidbody>() && !other.GetComponent<CharacterController>())
            {
                other.attachedRigidbody.useGravity = true;
            }
        }
    }
}

Small video of what it looks like in game.

What are you trying to do exactly? Do you want the character to get pushed back when you throw the ball?

Back to high school physics we go! Remember Newton’s third law of motion? For every action, there is an equal and opposite reaction. When you throw the ball, calculate the force that was required to accelerate the ball to the velocity you gave it, and apply the same force in the opposite direction to the player’s rigidbody at the point where the ball was released from.

I am trying to get this kind of movement in the video to be in my project.

I think I have something, but the physics are all wrong.Can anyone tell me why there is a constant force no matter if the player tries to change the direction of the force?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

namespace BNG
{
    public class ZeroG : MonoBehaviour
    {
        OVRPlayerController pControl;
        BNGPlayerController bngController;
        CharacterController characterController;
        public Rigidbody rb;
        public float speed;
        public bool GravityEnabled = true;
        public Transform trackingSpace;
        public OVRInput.Controller left;
        public OVRInput.Controller right;

        private void Start()
        {
            pControl = GameObject.FindGameObjectWithTag("Player").GetComponentInChildren<OVRPlayerController>();
            bngController = GameObject.FindGameObjectWithTag("Player").GetComponent<BNGPlayerController>();
            characterController = GameObject.FindGameObjectWithTag("Player").GetComponentInChildren<CharacterController>();
        }
        void OnTriggerEnter(Collider other)
        {
            if (other.GetComponent<CharacterController>())
            {
                ChangeGravity(false);
                pControl.ZeroG();
                rb.useGravity = false;
                rb.isKinematic = false;
                rb.velocity = trackingSpace.rotation * OVRInput.GetLocalControllerVelocity(left) * speed;

            }
            if (other.GetComponent<Rigidbody>() && !other.GetComponent<CharacterController>())
            {
                other.attachedRigidbody.useGravity = false;

            }
        }
        public void ChangeGravity(bool gravityOn)
        {
            GravityEnabled = gravityOn;
            bngController.GravityEnabled = gravityOn;
        }
        void OnTriggerExit(Collider other)
        {

            if (other.GetComponent<CharacterController>())
            {
                ChangeGravity(true);
                pControl.NormalG();
                rb.useGravity = true;
                rb.isKinematic = true;
            }

            if (other.GetComponent<Rigidbody>() && !other.GetComponent<CharacterController>())
            {
                other.attachedRigidbody.useGravity = true;
            }
        }
    }
}