- Home /
How to move the player object in the same direction as the input axis, considering the cameras direction?
First and foremost, here is the code I am using:
using UnityEngine;
public class ThirdPersonController : MonoBehaviour {
CharacterController player;
public Camera playerCamera;
public Transform auxCamera;
public Transform directionCube;
public float speed = 6f;
Vector3 movement;
Vector3 cameraMovement;
float horMoveAxis;
float verMoveAxis;
float horCameraAxis;
float verCameraAxis;
float leftTriggerAxis;
float rightTriggerAxis;
public float horSensitivity = 2f;
public float verSensitivity = 2f;
public float cameraRotationSpeed = 20;
public float viewRange = 70;
// Use this for initialization
void Start () {
player = gameObject.GetComponent<CharacterController>();
}
// Update is called once per frame
void Update () {
//Seting up axis
//Movement Axis
horMoveAxis = Input.GetAxis("PS4_LeftStickX");
verMoveAxis = Input.GetAxis("PS4_LeftStickY");
//Camera Axis
horCameraAxis += Input.GetAxis("PS4_RightStickX");
verCameraAxis += Input.GetAxis("PS4_RightStickY");
verCameraAxis = Mathf.Clamp(verCameraAxis, -viewRange, viewRange);
//Trigger Axis
leftTriggerAxis = Input.GetAxis("PS4_L2");
rightTriggerAxis = Input.GetAxis("PS4_R2");
//Setting up a new reset point for the triggers.
leftTriggerAxis = (leftTriggerAxis < 0) ? 1-leftTriggerAxis * -1 : leftTriggerAxis + 1;
rightTriggerAxis = (rightTriggerAxis < 0) ? 1-rightTriggerAxis * -1 : rightTriggerAxis + 1;
print("leftTriggerAxis = " + leftTriggerAxis + " ,rightTriggerAxis = " + rightTriggerAxis);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Movement
movement.x = horMoveAxis * speed;
movement.z = verMoveAxis * speed;
directionCube.localPosition =Vector3.Lerp(directionCube.localPosition, new Vector3(horMoveAxis, 0, verMoveAxis),0.1f);
player.Move(movement * Time.deltaTime);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Camera
auxCamera.localEulerAngles = new Vector3(verCameraAxis,horCameraAxis,0);
}
}
I am trying to make a 3rd person controller with CharacterController.move(), using joystick input. Movement works fine, and I can sucessfully move my character in 3D space. However, I'm having a hard time figuring out how to move the character in the same direction as the one aplied on the input axis, considering the direction of the camera. I know that is kind of incomprehensible, given my broken english and lack of a better explanation of what Im trying to do, but lets think of an example so you guys can understand what I'm on about:
Imagine the character is stopped, and you rotate the camera around it, so that the characters face is facing the camera. I want to make it so when I press forward on the stick (the direction the camera is facing) the character turns around and starts moving in that direction.
I created an empty object, called "auxCamera", to store the rotation input from the right stick, and as such allow the child Camera object atached to it to rotate around the player.
I also created a cube "directionCube" so I can visualize the input in 3D space.
Keep in mind that I am using characterController.move() and as such changing the position with transform.position += auxCamera.forward is not a viable option.
I have also tried movement = auxCamera.rotation * movement; but that always moves the character in the direction of the camera, which is not what I want here, among other issues.
I hope I made myself clear enough so you guys can help me out. I have sucessfully built a pretty robust FPS controller using these fundamentals, but I'm having a hard time with this one.
Any help, including any way to improve my current code, would be highly apreciated. Thank you!