- Home /
How to make the player move where camera is facing?
I have a camera orbiting the player and want my character to move in the direction the camera is facing. I don't want the player to always turn as i move the camera, like when standing still. I want him to start running in the direction the camera is facing when "W" is pressed and strafe left and right with "A" and "D". I'm a total noob and would need a proper example to learn from.
Here's my camera script:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class ThirdPersonCamera : MonoBehaviour {
private const float Y_ANGLE_MIN = -89.9f;
private const float Y_ANGLE_MAX = 89.9f;
public Transform lookAt;
public Transform camTransform;
private Camera cam;
public float sensitivityX = 4.0f;
public float sensitivityY = 4.0f;
public float distance = 3.0f;
private float currentX = 0.0f;
private float currentY = 0.0f;
private void Start()
{
camTransform = transform;
cam = Camera.main;
}
private void Update()
{
currentX += Input.GetAxis("Mouse X") * sensitivityX;
currentY -= Input.GetAxis("Mouse Y") * sensitivityY;
currentY = Mathf.Clamp(currentY, Y_ANGLE_MIN, Y_ANGLE_MAX);
}
private void LateUpdate()
{
Vector3 dir = new Vector3(0, 0, -distance);
Quaternion rotation = Quaternion.Euler(currentY, currentX, 0);
camTransform.position = lookAt.position + rotation * dir;
camTransform.LookAt(lookAt.position);
}
}
Answer by Zodiarc · Jun 13, 2018 at 11:15 AM
See my answer here https://answers.unity.com/questions/1495044/how-can-i-make-wasd-controls-relative-to-camera-po.html?childToView=1495986#comment-1495986 EDIT: Oops I missed the part about strafing. You simply make the player look the same way the camera is looking (I suggest you use an empty and make it the parent of the camera. this way you can mess with the empty and your camera offset will always be intact)
Let's assume cameraAnchor is your empty (no guarantee for correct syntax):
Transform cameraAnchor = <reference your empty here>
transform.LookAt(cameraAnchor.forward);
if(Input.getKey(KeyCode.W)) {
transform.Translate(cameraAnchor.forward);
}
if(Input.getKey(KeyCode.S)) {
transform.Translate(cameraAnchor.forward * -1);
}
if(Input.getKey(KeyCode.D)) {
transform.Translate(cameraAnchor.right);
}
if(Input.getKey(KeyCode.A)) {
transform.Translate(cameraAnchor.right * -1);
}
Your answer
Follow this Question
Related Questions
Flickering screen when development build disabled 0 Answers
Player Movement Relative to Camera? 4 Answers
Move RigidBody character relative to camera. 2 Answers
Making my look script turn smoothly 0 Answers