- Home /
Question by
unity_w8Ut9sYUwJx21g · Oct 17, 2019 at 07:36 PM ·
camerarotationmovementbeginnerbegginer
Moving character relative to camera position.
So i have a cube that currently moves towards where I go using the wasd but it isn't moving forward relative to the camera position, it just moves towards the Z axis. this is my code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField]
private float _speed;
[RangeAttribute(0, 1),SerializeField]
private float _rotationSmooth;
private Rigidbody _rigidbody;
private Vector3 _forward;
// Start is called before the first frame update
void Start()
{
_forward = Camera.main.transform.forward;
_forward.y = 0;
_forward = Vector3.Normalize(_forward);
_rigidbody = gameObject.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
//get input from player
float horizontalInput = Input.GetAxisRaw("Horizontal");
float verticalInput = Input.GetAxisRaw("Vertical");
// target direction
Vector3 direction = new Vector3(horizontalInput, 0, verticalInput);
if (direction.magnitude != 0)
{
//get rotation direction
Quaternion targetDir = Quaternion.LookRotation(direction) ;
//smoothly rotate towards target rotation
transform.rotation = Quaternion.Lerp(transform.rotation, targetDir, _rotationSmooth);
}
// move player
direction = direction.normalized * _speed * Time.deltaTime * direction.magnitude;
_rigidbody.MovePosition(transform.position + direction);
}
}
How do i make it move relative to the cameras position in my case?
Comment
It's not very clear what is happening and what should happen.
So my main issue is that when i press w, for example, the cube moves towards the worlds z position and not relative to the cameras position.
Answer by suIly · Oct 20, 2019 at 04:30 PM
xMovement = Input.GetAxisRaw("Horizontal");
zMovement = Input.GetAxisRaw("Vertical");
movementHorizontal = playerCamera.transform.right * xMovement;
movementVertical = playerCamera.transform.forward * zMovement;
finishedMovement = (movementHorizontal + movementVertical).normalized * speedToMove;
Try this :)