- Home /
C# AddForce Relative To Camera Left And Right Movement
All other answers related to AddForce relative to camera position only explain how to add force forward and backward. I've got that part down, but I need to be able to move left and right.
Vector3 pushDir = GameObject.Find("cameraMan").transform.position - transform.position;
if (Input.GetKey("up") || Input.GetKey("down"))
{
rb.AddForce(pushDir.normalized * Input.GetAxis("Vertical") * (-10));
}
This code works fine, I already have a script that rotates the camera and this always moves you forwards/backwards from its perspective. But when I try to write this for left/right movement:
if (Input.GetKey("right") || Input.GetKey("left"))
{
rb.AddForce(sideDir.normalized * Input.GetAxis("Horizontal") * (-10));
}
It still only moves forwards and backwards. I've tried pushDir.right, pushDir.normalized.right, I even tried making a perpendicular child for the camera, to see if moving back and forth relative to that object would move me left and right; no dice. Side note: this is a game about moving around a spinning ball, AddForce is what I'd like to use for that movement. Any help is much appreciated!
How do you compute sideDir
? Have you tried something like
Transform camera$$anonymous$$an = GameObject.Find("camera$$anonymous$$an").transform;
Vector3 pushDir = camera$$anonymous$$an.position - transform.position;
sideDir = Vector3.Cross( camera$$anonymous$$an.up, pushDir );
Answer by JonPQ · Sep 12, 2019 at 04:04 PM
push dir is just camera.transform.forwards. or transform.up. or transform.right. or multiply them by -1.0 to go opposite direction...
if you need pushdir to be horizontal.... then just copy the vector, zero out the y component, then re-normalize it, to get a flat forwards and sideways push vector.
:)
If you must use ( pushDir = targetObjectPosition - cameraPosition).Normalized; ... then you can make a side vector like this... side.x = pushDir.z; side.y=0; side.z = -pushDir.x; happy vectoring !