- Home /
Rotating around an object
Hi guys,
I have my camera attached to an object and want to be able to move the camera around the object similar to a third-person controller. For that I created my own simple code.
First I attach the camera to the object (attachedUnit) and then set the initial distance and rotation:
transform.position = attachedUnit.transform.position - new Vector3(0f, 10f, 0f);
transform.rotation = Quaternion.Euler(new Vector3(-90f, 0f, 0f));
transform.parent = attachedUnit.transform;
Next, here is my update function within the camera script that attempts to transpose the mouse movement into a rotation around the attached object:
void Update() {
float rotationX = Input.GetAxis("Mouse X");
float rotationY = -Input.GetAxis("Mouse Y");
transform.RotateAround(attachedUnit.transform.position, Vector3.back, rotationX * 0.5f);
transform.RotateAround(attachedUnit.transform.position, Vector3.left, rotationY * 0.5f);
}
When using this script in Unity, I get a load of crazy rotations around my object. The weird part is that each of the RotateAround functions on their own work perfectly. Only the combination of the two screws it up...
How can I fix this?
Answer by NikEy · Oct 27, 2012 at 10:34 PM
Ok, I got something that works, but it's not very pretty..
float rotationX = Input.GetAxis("Mouse X");
float rotationY = Input.GetAxis("Mouse Y");
transform.RotateAround(attachedUnit.transform.position, Vector3.left, rotationY * 0.5f);
if (holder == null)
holder = new GameObject("CameraAttachment");
holder.transform.position = new Vector3(attachedUnit.transform.position.x, attachedUnit.transform.position.y, transform.position.z);
transform.LookAt(holder.transform.position, Vector3.back);
transform.RotateAround(holder.transform.position, Vector3.back, rotationX * 0.5f);
transform.LookAt(attachedUnit.transform.position, Vector3.back);
Answer by DaveA · Oct 26, 2012 at 08:32 PM
You should only use one RotateAround but it means figuring out the axis/angle to rotate around. In such cases I tend to punt and use two transforms, one for X the other for Y rotation, the X a child of Y
hmm why use a child at all then? Could you provide a small example if possible? thank you so much
I tried a variety of different ways, e.g. attaching a new object to the center-object, attaching the camera to the new object and then rotating this, but the results are the same unfortunately. Anyone an idea how to do this right?
Your answer
Follow this Question
Related Questions
Rotating gameobject after mouselook 0 Answers
How to make Camera position Independent of its Rotation? 1 Answer
nullifying targetObject after a Smooth LookAt Transition 2 Answers
Resources on how to make the player move/rotate in the camera direction? 1 Answer
Rotating Camera around player object 0 Answers