- 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