I am trying to pick up an Object and drag it with my mouse.

i have made this script to pick up an object and drag it to the raycast hit point but there is one problem. the cube is constantly in the way of the ray so it kind of loops from the right place to in your face. can anybody help me fix my problem.
here is the script…

var Obj : GameObject;
var isDragging : boolean=false;
function OnMouseOver(){
if (Input.GetMouseButton(0)){
isDragging=true;
}
if (Input.GetMouseButton(1)){
isDragging=false;
}

}
function Update() {

    var mousePosition : Vector3 = (Input.mousePosition);
    var screenRay : Ray = Camera.main.ScreenPointToRay( mousePosition );
    var hitInfo : RaycastHit;
    Physics.Raycast( screenRay, hitInfo );
    var pointOfImpact : Vector3 = hitInfo.point;
if (isDragging==true){
    Obj.transform.position=(pointOfImpact);
    }
    

}

I believe i am having a problem with the raycast hit position because if the object’s position = the hit position then the object is constantly moving to where the ray hits it. is there a way to make the ray ignore the object?

also i was trying to make the object float above the hit point by adding an int of Y, but it doesn’t seem to work with the Vector3.

You can use layers. By using the last version of the function (Unity - Scripting API: Physics.Raycast), you can ignore object with this or that layer. You could use the IgnoreRaycast layer, so you don’t even have to create a new one.

  • When an object is dragged, change its layer.
  • Cast a ray on all layers but this one (~LayerMask.NameToLayer(“IgnoreRayst”) …)
  • When the dragging stops, restore the layer