Hi I’m trying to make a player movement script using rigidbodies.I’m also pretty new to this so sorry if I have some mistakes or weird things with my code.I’ve decided to use velocity to move my player and I’ve set it up as well as camera rotation based on the mouse axis. (This also rotates the player)
But I noticed that even though my player rotates the way that I want him he doesn’t really move the way he is facing. So bottom line is I was wondering how do I make him move locally based on the direction he is facing?
Here is my code:
// Sets the rigidbody for the player
public Rigidbody rb;
// Sets a modifiable player speed
public float speed = 0.0f;
// Makes a empty vector for movement for forward,back,left,and right
public Vector3 movement;
// Checks if player is grounded
public bool isGrounded;
// calls the camera
public GameObject icu;
// Mouse sensitivity
public float sensitivity = 0f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// sets the movement and direction based on the axis of the keys
movement = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
if (Input.GetAxis("Mouse X") < 0)
{
transform.Rotate(Vector3.up * -sensitivity * Time.deltaTime);
}
if (Input.GetAxis("Mouse X") > 0)
{
transform.Rotate(Vector3.up * sensitivity * Time.deltaTime);
}
if (Input.GetAxis("Mouse Y") < 0)
{
icu.transform.Rotate(Vector3.left * -sensitivity * Time.deltaTime);
}
if (Input.GetAxis("Mouse Y") > 0)
{
icu.transform.Rotate(Vector3.left * sensitivity * Time.deltaTime);
}
}
// Used for physics updates
void FixedUpdate()
{
// Calls the module for player movement and sends our movement variable to said module
playerMovement(movement);
}
// Makes a separate module for player movement and takes our module and sets it to help move the player in that direction
void playerMovement(Vector3 direction)
{
rb.velocity = direction * speed;
}
I was also curious if perhaps there was a good way to add a jump to the way I’m doing this?
,Hi, I’m new to most of this stuff but I’m using a rigidbody for my player and I’ve got it set up where the camera and object move based on the mouse axis. I also have it set up to where my player moves with velocity but it looks like it only moves globally. How can I change this to work local to the player’s direction?
Here is my code:
// Sets the rigidbody for the player
public Rigidbody rb;
// Sets a modifiable player speed
public float speed = 0.0f;
// Makes a empty vector for movement for forward,back,left,and right
public Vector3 movement;
// Checks if player is grounded
public bool isGrounded;
// calls the camera
public GameObject icu;
// Mouse sensitivity
public float sensitivity = 0f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// sets the movement and direction based on the axis of the keys
movement = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
if (Input.GetAxis("Mouse X") < 0)
{
transform.Rotate(Vector3.up * -sensitivity * Time.deltaTime);
}
if (Input.GetAxis("Mouse X") > 0)
{
transform.Rotate(Vector3.up * sensitivity * Time.deltaTime);
}
if (Input.GetAxis("Mouse Y") < 0)
{
icu.transform.Rotate(Vector3.left * -sensitivity * Time.deltaTime);
}
if (Input.GetAxis("Mouse Y") > 0)
{
icu.transform.Rotate(Vector3.left * sensitivity * Time.deltaTime);
}
}
// Used for physics updates
void FixedUpdate()
{
// Calls the module for player movement and sends our movement variable to said module
playerMovement(movement);
}
// Makes a seprate module for player movement and takes our module and sets it to help move the player in that direction
void playerMovement(Vector3 direction)
{
rb.velocity = direction * speed;
}