Rotate camera around player and set new forward directions
Posted
by
Samurai Fox
on Game Development
See other posts from Game Development
or by Samurai Fox
Published on 2014-08-24T13:00:16Z
Indexed on
2014/08/24
16:29 UTC
Read the original article
Hit count: 266
I have a 3rd person camera which can rotate around the player.
When I look at the back of the player and press forward, player goes forward. Then I rotate 360 around the player and "forward direction" is tilted for 90 degrees. So every 360 turn there is 90 degrees of direction change.
For example when camera is facing the right side of the player, when I press button to move forward, I want player to turn to the left and make that the "new forward".
I have Player object with Camera as child object. Camera object has Camera script. Inside Camera script there are Player and Camera classes. Player object itself, has Input Controller.
Also I'm making this script for joystick/ controller primarily.
My camera script so far:
using UnityEngine;
using System.Collections;
public class CameraScript : MonoBehaviour
{
public GameObject Target;
public float RotateSpeed = 10,
FollowDistance = 20,
FollowHeight = 10;
float RotateSpeedPerTime,
DesiredRotationAngle,
DesiredHeight,
CurrentRotationAngle,
CurrentHeight,
Yaw,
Pitch;
Quaternion CurrentRotation;
void LateUpdate()
{
RotateSpeedPerTime = RotateSpeed * Time.deltaTime;
DesiredRotationAngle = Target.transform.eulerAngles.y;
DesiredHeight = Target.transform.position.y + FollowHeight;
CurrentRotationAngle = transform.eulerAngles.y;
CurrentHeight = transform.position.y;
CurrentRotationAngle = Mathf.LerpAngle(CurrentRotationAngle, DesiredRotationAngle, 0);
CurrentHeight = Mathf.Lerp(CurrentHeight, DesiredHeight, 0);
CurrentRotation = Quaternion.Euler(0, CurrentRotationAngle, 0);
transform.position = Target.transform.position;
transform.position -= CurrentRotation * Vector3.forward * FollowDistance;
transform.position = new Vector3(transform.position.x, CurrentHeight, transform.position.z);
Yaw = Input.GetAxis("Right Horizontal") * RotateSpeedPerTime;
Pitch = Input.GetAxis("Right Vertical") * RotateSpeedPerTime;
transform.Translate(new Vector3(Yaw, -Pitch, 0));
transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);
transform.LookAt(Target.transform);
}
}
© Game Development or respective owner