- Home /
Keep camera horizontal with RotateAround
Hello,
I've made a script to rotate the camera around an object with touch-gesture (iOS):
var x = Input.touches[0].deltaPosition.x rotateSpeed Time.deltaTime;
var y = Input.touches[0].deltaPosition.y rotateSpeed Time.deltaTime;
transform.RotateAround (gameObject.Find("Cube").transform.position, camera.transform.right, -y); transform.RotateAround (gameObject.Find("Cube").transform.position, camera.transform.up, x);
The camera rotates around the Cube. When I activate one of the two lines separately they work ok.
With only first line active swiping Up-down, rotates the camera around the cube vertically.
With only the second line active swiping left-right, moves the camera around the cube horizontally.
But if I activate them both the movement is not like expected, the camera doesn't keep level with the horizon.Instead it dolly's around. Basically what I'm after is the movement created with the Unity MouseOrbit.js-script (which is only for mouse-movement). But I can't get it working in combination with my script.
Any suggestions? Is it my combining the 2 movements wrong or do I need to build in some sort of restriction? Any advice is greatly appreciated. David
Answer by Molix · Mar 05, 2011 at 12:52 PM
The second parameter of RotateAround is the axis of rotation. Make sure that is always vertical, e.g. instead of camera.transform.right and up, just use Vector3.right and Vector3.up. You may need to clamp one of the values to something (-90,90) to prevent weirdness at the top/bottom.
Answer by Lypheus · Mar 09, 2013 at 01:04 AM
The above does not work for me, try this if you have the same results:
// fetch the users mouse motion for this frame
y = -Input.GetAxis( "Mouse Y" ) * ySpeed;
x = Input.GetAxis( "Mouse X" ) * ySpeed;
// now adjust cameras rotation around target player based on the mouse x,y movement
transform.RotateAround( target.position, target.right, y );
transform.RotateAround( target.position, target.up, x );
transform.rotation = Quaternion.Euler( transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 0f );
Your answer
Follow this Question
Related Questions
Move Camera Over Terrain Using Touch Input 2 Answers
Control the camera with a half of the touch screen 0 Answers
Help with camera movement using mobile input 0 Answers
Delta touch trembling 0 Answers
Camera Orbit Rotation Problem 0 Answers