Figuring out what the acceleration will be before applying force to RigidBody2D
I am trying to figure out what change in velocity will occur to my game object on account of a given force being added in a given frame, so I can do certain things like set the velocity exactly to zero if the resultant velocity will be smaller than the change in acceleration, so as to allow the game object (a spaceship with zero drag movement) to come fully to rest, or not allow additional force to be added if the resultant force will be greater than the max velocity.
My attempt at figuring this out is below, but it doesn't seem to estimate the acceleration correctly.
public Vector2 Force = new Vector2(0f, 10.0f);
private Rigidbody2D RB2D;
public float Acceleration
{
get
{
return Force.y / RB2D.mass;
}
}
public Vector2 Velocity
{
get { return RB2D.velocity; }
}
public void Thrust()
{
Vector2 acceleration = Acceleration * Time.deltaTime * transform.up;
Vector2 afterAcceleration = Velocity + acceleration;
if (RB2D.velocity.magnitude > 0 && afterAcceleration.magnitude < acceleration.magnitude)
{
Debug.Log("I am never fired! Why?");
RB2D.velocity = new Vector2(0, 0);
}
else if (afterAcceleration.magnitude < maxVelocity)
{
Debug.Log("The resultant max velocity magnitude is always a bit below the actual maxVelocity");
RB2D.AddRelativeForce(Force, ForceMode2D.Force);
}
}
The estimation of the new velocity seems to be off far enough for my checks to not work as they are intended. I can think of some work arounds that involve manually seeing what the velocity change was after applying the force and then setting the velocity to a value based on that, but I was wondering if it is even possible to do it this way.
Your answer
Follow this Question
Related Questions
Rocket Landing 1 Answer
How to get static speed 1 Answer
RigidBody Controller Forces 0 Answers
Bullet not inheriting speed of player. 0 Answers