- Home /
 
How to execute the lookAt function here?
Hey Guys! I'm creating a game for mobile devices and now I'm stuck at a point where cannot execute the lookAt function properly. I've a plane with a sphere on it. Earlier I had the camera exactly at the top of the plane like a top view of the plane and I was able to execute the lookAt function properly with the following code:
 void FixedUpdate() {
 
         GameObject targetObject = GameObject.Find("Ball");
 
         if (targetObject != null) {
             if (Input.touchCount > 0) 
             {
                 Touch theTouch = Input.GetTouch(0);
                 
                 Ray ray = Camera.main.ScreenPointToRay(theTouch.position);
                 
                 RaycastHit hit;
                 
                 if(Physics.Raycast(ray, out hit, 100.0f))
                 {
 
                     if(Input.touchCount ==1)
                     {
                         if(theTouch.phase == TouchPhase.Began)
                         {
 
                             isRotating = false;
                         }
                         
                         if(theTouch.phase == TouchPhase.Moved)
                         {
                         Vector3 tempTouch = new Vector3(theTouch.position.x ,theTouch.position.y, myCamera.position.y - targetObject.transform.position.y);
                             fingerPosition = Camera.main.ScreenToWorldPoint(tempTouch);
                         targetObject.transform.LookAt(fingerPosition);
 
 
 
                             isRotating = true;
                             
                         }
                         
                         if(theTouch.phase == TouchPhase.Ended || theTouch.phase == TouchPhase.Canceled)
                         {
                             if(isRotating == true)
                             {
                                 
                             }
                         }
                     }                        
                 }                        
                 
             }                                
         }
 
 
     }                                    
 
               But now as I've rotated the camera along the x-axis by 55 degrees so it behaves awkwardly. I know I've to calculate the vertical distance between the camera and the plane. But I'm bit bad with maths. This is my scene looks like

I want to make the sphere look at touch along the x and z plane.
Pls help
Thank You.
Answer by robertbu · Mar 04, 2014 at 05:58 PM
When your camera is at an angle with respect to the world axes, then ScreenToWorldPoint() is no longer a good solution. Typically the solutions is to use Unity's built-in Plane class and Raycast() against that plane to generate the point. Here is a script in the Unity Wiki that does that:
http://wiki.unity3d.com/index.php?title=LookAtMouse
Note due to perspective, at some angles and distances the alignment my look a bit off. If you have doubts about the alignment, setup to view both the Scene and Game windows with the Scene camera looking top down. Place a marker object at the point on the plane.
Your answer
 
             Follow this Question
Related Questions
Orbit Camera Zoom limit 1 Answer
Touch not working if camera is moved 0 Answers
Attaching camera to instantiated object 1 Answer
Rotate Turret to Tag 1 Answer
Rotate camera smooth on touch 0 Answers