Player-movable rigidbodies w/ collision?

Working with a script that allows players to move (pick up) rigidbodies but can’t figure out exactly what direction I should be headed to allow the rigidbodies to still have collision while being moved. Is there a way to move rigidbodies in a predictable manner while still having them be physics aware?

using UnityEngine;

using System.Collections;

public class ObjectSelection : MonoBehaviour {
Transform selectedObj = null;
RaycastHit hit;
float dist;
Vector3 newPos;
Camera cam;

// Use this for initialization
void Start () {
    cam = Camera.mainCamera;
}

// Update is called once per frame
void Update () {
    if(Input.GetMouseButton(0)){
        if(!selectedObj){
            if(Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, 5.0f) && hit.transform.tag == "Block"){
                Debug.Log ("Selectable Object");
                    if(hit.rigidbody){
                        hit.rigidbody.velocity = Vector3.zero;
                        hit.rigidbody.freezeRotation = true;
                    }
                selectedObj = hit.transform;
                dist = Vector3.Distance(selectedObj.position, cam.transform.position);
            }
        } else {
            newPos = cam.transform.position + (cam.transform.forward * 5);
            selectedObj.position = newPos;
        } 
    } else{
        selectedObj = null;
    }
}

}

Edit: Tried playing around with kinematics to kill time, but that was clearly not a step in the right direction. Any other ideas?

Have you tried the DragRigidbody script? just mess around with that until you have soething you need, i added the ability to move the objects in and out in one of my games. Its a handy script to have and it uses collisions aswell

you should child the object to the player, instead of directly adjusting it’s transform, which will ignore physics:

void Start () {
    cam = Camera.mainCamera;
}

// Update is called once per frame
void Update () {
    if(Input.GetMouseButton(0)){
        if(!selectedObj){
            if(Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, 5.0f) && hit.transform.tag == "Block"){
                Debug.Log ("Selectable Object");
                    if(hit.rigidbody){
                        hit.rigidbody.velocity = Vector3.zero;
                        hit.rigidbody.freezeRotation = true;
                    }
                selectedObj = hit.transform;
                dist = Vector3.Distance(selectedObj.position, cam.transform.position);
                selectedObj.parent = cam;
            }
        }
    } else{
        selectedObj.parent = null;
        selectedObj = null;
    }
}

something like this