- Home /
Better Player Movement Code
Trying to make a clone of Silent Hill or Resident Evil in terms of movement where you use the left and right buttons to steer your player and use forward or back to move in that direction. Here is my code:
public class player : MonoBehaviour {
[SerializeField] float mainForce = 100f;
[SerializeField] float ReverseForce = 100f;
[SerializeField] float steerForce = 100f;
Rigidbody rigidBody;
void Start()
{
rigidBody = GetComponent<Rigidbody>();
}
void Update()
{
ProcessInput();
}
private void ProcessInput ()
{
Accelerate();
Rotate();
}
void Accelerate ()
{
if (Input.GetKey (KeyCode.W))
{
rigidBody.AddRelativeForce (Vector3.forward * mainForce);
}
else if (Input.GetKey (KeyCode.S))
{
rigidBody.AddRelativeForce (-Vector3.forward * ReverseForce);
}
}
void Rotate()
{
rigidBody.freezeRotation = true;
float rotationThisFrame = steerForce * Time.deltaTime;
if (Input.GetKey (KeyCode.A))
{
transform.Rotate (Vector3.down * rotationThisFrame);
}
else if (Input.GetKey (KeyCode.D))
{
transform.Rotate (Vector3.up * rotationThisFrame);
}
}
}
Public Float Settings
Main Force: 50
Reverse Force: 50
Steer Force: 80
One thing I would like to do is implement a sprint/run button. When I try to make one using this code, the button stays down and I sprint forever. Aside from that, I'm looking to see if there's any better way to implement this kind of movement. Any help is appreciated.
As for the sprinting, it would be fairly easy to implement on your current code. If you change your Accelerate function to:
float sprint$$anonymous$$ultiplier = 2f;
void Accelerate ()
{
float forceFactor = 1f;
if (Input.Get$$anonymous$$ey ($$anonymous$$eyCode.LeftShift))
{
forceFactor *= sprint$$anonymous$$ultiplier;
}
if (Input.Get$$anonymous$$ey ($$anonymous$$eyCode.W))
{
rigidBody.AddRelativeForce (Vector3.forward * mainForce * forceFactor);
}
else if (Input.Get$$anonymous$$ey ($$anonymous$$eyCode.S))
{
rigidBody.AddRelativeForce (-Vector3.forward * ReverseForce);
}
}
I remember making the acceleration function like this and not working. I screwed up by not putting the "forceFactor" variable in the function. I usually put all variables together outside of any functions made. Thanks.
Your answer
Follow this Question
Related Questions
Rigidbody Player Controller sticking to walls 0 Answers
Top Down Mobile Game movement (rb or CC) 1 Answer
Why does my character keep sliding around? Help! (Rigid Body) 1 Answer
How to make a rigidbody move in the direction of finger(x,y,z) 1 Answer
Question about movement with Rigidbody | Diagnol movement going faster 2 Answers