I apologize if this has already been asked, but I searched around for a while and couldn’t find anything.
I have a cube with a child camera, which is positioned behind the cube, just like your average third person over-the-shoulder camera.
My cube is moved by rigidbody.addforce
. My problem, however, is that when the cube is rolled forward, the camera maintains its local position and rotation, thus resulting in the camera rotating 90 degrees along with the cube and still looking at the same side it was originally. Which, when rotating results in great difficulty as far as seeing what’s happening on the screen goes. I don’t want that.
I want the camera to adjust its rotation and position to maintain the same over-the-shoulder view while the cube can roll and fling as much as it’d like.
I’ve tried:
- attaching a rigidbody to the camera and adjusting the values to be as little of an interference as possible and freeze all its constraints. Resulted in nothing but very wonky movement for the cube.
- using the snippet found in [this guide](http://answers.unity3d.com/questions/423031/how-do-i-set-a-child-object-to-not-rotate-if-the-p.html) to prevent the camera from rotating itself with the cube, which worked. It doesn't rotate anymore, but still "folds" with the cube when it rolls.
I’ll include the code for the cube’s forward movement and the camera’s rotation fix, as well as an image to try and illustrate what I want to achieve.
//Rotation fix
Quaternion rotation;
void Awake()
{
rotation = transform.rotation;
}
void LateUpdate()
{
transform.rotation = rotation;
}
//Forward movement
public float spd;
Rigidbody rb;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void FixedUpdate () {
if (Input.GetKey(KeyCode.W))
{
rb.AddForce(Vector3.forward * spd);
}
}