Speed variable not incrementing per frame (Bug?)
I'm working with first person movement, incrementing the Y speed of my character controller by Time.deltaTime * Physics.gravity.y:
var speedY = 0;
function Update () {
speedY += -Physics.gravity.y * Time.deltaTime;
Debug.Log("SpeedY: "+speedY);
if(Input.GetButtonDown("Jump")) {
speedY += 30;
}
};
I understand this to be pretty standard stuff. Unfortunately, my controller acts very unpredictably, falling slowly, not falling or actually floating upwards. Logging the speedY variable shows me that it is simply not updating when the controller should be accelerating downwards, or changing sporadically.
Re-writing the physics bit of my code to do it manually was my first response, so I came up with:
if(cc.isGrounded) {
speedY = 0;
} else {
speedY += -9.81*Time.deltaTime;
};
This has no effect. Curiously, though (and this is what makes me suspect a bug), if I pump "gravity" up to about sixty, all the funny behaviour evaporates and it's like walking on jupiter. Not what I want, but playable. The variable stops incrementing the way it should between 55 and 60, ie I'm still seeing the strange behaviour at
speedY += -55*Time.deltaTime;
but not
speedY += -60*Time.deltaTime;
Sorry for being kinda long winded, but this seems a bit complex and funny, so I wanted to be as clear as I can. Is this a bug, or some esoteric part of how variables are updated at runtime that I need to be aware of?
Answer by richardgengle · Aug 07, 2020 at 03:19 AM
@Flaurentine recall that certain numbers have a furthest extent... in that .. a float has #######.## .... if you get a number like 0.00001... that is zero.... so if ur math anywhere pushes u beyond 2 decimal places, eg, 0.0001,,,, the numbers go funky bad.
thats not true, floats can have 7 decimals and they are not bad