- Home /
 
How can I make a grappling hook with RayCast?
I'm trying to make a game where I can move to targets with Raycast. I figured the code would work in the opposite way that the I can pull things to me but it isn't working.
 var target : Transform;
 var target1 : Transform;
 
 function Start()
 {
     Screen.showCursor = false;
 }
 
 function Update () 
 {
     if(Input.GetButton("Fire1"))
     {
         var ray1 : Ray = camera.ViewportPointToRay (Vector3(0.5,0.5,0));
         var hit1 : RaycastHit;
         if (Physics.Raycast (ray1, hit1,100))
         {
             if(hit1.transform.tag == "Pullable")
             {
                 hit1.transform.position = Vector3.MoveTowards(hit1.transform.position, target.position,Time.deltaTime * 25);
                 hit1.transform.LookAt(target);
             }
         }
         Debug.DrawLine (ray1.origin, hit1.point, Color.red);
     }
     if(Input.GetButton("Fire2"))
     {
         var ray2 : Ray = camera.ViewportPointToRay (Vector3(0.5,0.5,0));
         var hit2 : RaycastHit;
         if (Physics.Raycast (ray2, hit2,100))
         {
             if(hit2.collider.gameObject.tag  == "Teleport")
             {
                 transform.position = Vector3.MoveTowards(transform.position, target1.position,Time.deltaTime * 25);
                 transform.LookAt(target);
                 print ("I hit it");
             }
         }
         Debug.DrawLine (ray2.origin, hit2.point, Color.green);        
     }
 }
 
              
               Comment
              
 
               
              Answer by aldonaletto · Nov 05, 2011 at 03:20 AM
I didn't understand exactly what you're trying to do, but with a change in the ray creation you can click in the object and make it go in the target direction - but it will stop when you release the button, or when the object is no more under the mouse pointer:
function Update () 
{
    if(Input.GetButton("Fire1"))
    {
       var ray1 : Ray = camera.ScreenPointToRay (Input.mousePosition);
       var hit1 : RaycastHit;
       if (Physics.Raycast (ray1, hit1, 100))
       {
         if(hit1.transform.tag == "Pullable")
         {
          hit1.transform.position = Vector3.MoveTowards(hit1.transform.position, target.position,Time.deltaTime * 25);
          hit1.transform.LookAt(target);
         }
       }
       Debug.DrawLine (ray1.origin, hit1.point, Color.red);
    }
    if(Input.GetButton("Fire2"))
    {
       var ray2 : Ray = camera.ScreenPointToRay (Input.mousePosition);
       var hit2 : RaycastHit;
       if (Physics.Raycast (ray2, hit2, 100))
       {
         if(hit2.collider.gameObject.tag  == "Teleport")
         {
          transform.position = Vector3.MoveTowards(transform.position, target1.position,Time.deltaTime * 25);
          transform.LookAt(target);
          print ("I hit it");
         }
       }
       Debug.DrawLine (ray2.origin, hit2.point, Color.green);       
    }
}
 
              Your answer
 
             Follow this Question
Related Questions
Raycast and Layer Masks 1 Answer
falling off 90 degree angles when walking on walls 0 Answers
How do I use raycast to simulate gun fire? 1 Answer
Unity3D raycast ignore self 3 Answers
Rotate to mouse seems to be inversed 1 Answer