The initial SoyBoyController.cs FixedUpdate():
void FixedUpdate() {
var acceleration = accel;
var xVelocity = 0f;
if (input.x == 0) {
xVelocity = 0f;
}else {
xVelocity = rb.velocity.x;
}
rb.AddForce(new Vector2(((input.x * speed) - rb.velocity.x) * acceleration, 0));
rb.velocity = new Vector2(xVelocity, rb.velocity.y);
}
This code is responsible for moving SoyBoy in a X axis.
I usually like to refactor stuff around to get better understanding of whats going on.
I come up with something like this:
void FixedUpdate() {
float acceleration = accel;
rb.velocity = SetVelocity();
Vector2 force = new Vector2((input.x * speed) - rb.velocity.x, 0);
rb.AddForce(force * acceleration);
}
Vector2 SetVelocity() {
Vector2 stopVelocity = new Vector2(0, rb.velocity.y);
Vector2 currentVelocity = rb.velocity;
return input.x == 0 ? stopVelocity : currentVelocity;
}
For me it is much easier too see whats going on here.
There is this code I find very interesting:
(input.x * speed) - rb.velocity.x
It is a part of the force calculation. It will cap your speed at a given speed when you continue pressing direction button and very quickly stop you if you stop pressing it. For such a short equation I find it very smart.
Does this operation have any ‘formal’ name?