非常に単純な移動スクリプトがオブジェクトに添付されています。このスクリプトを使用すると、オブジェクトを勢いで上下左右に動かすことができます。昨夜、私はスクリプトが問題なく動作していると思った。私はオブジェクトの無限に小さな動きに気付きましたが、オブジェクトとして単純にフレームごとに描画されるか、コードによって「動かす」ように破棄しました。Unity C#Time.deltaTimeバグ
しかし、今日私は家に帰って、それを解雇し、オブジェクトはすぐに右に跳び上がり、非常に速く動いた。私が何かを変えなかったので、私が狂ったようにいくらかのデバッグと感覚を覚えた後、私のラップトップが差し込まれていないことに気付き、マシンのパワーを落として、バグの原因になるかもしれません。
私はこのコードを試してみましたが、改善のためにTime.Deltaを追加したり削除したりしましたが、問題を解決できないようです。すべてのTime.deltaTimesを削除すると、ずっと悪化しますが、どこにでも置いて問題を解決することはできません。
時間の問題が私に問題を通知する原因となったが、実際の問題が動きコードのどこかにある可能性があると私は思っている。私がボタンを押していなくても、 Y軸はif、else、else if文で問題になるかもしれないと私に貸し出しています。
ご協力いただければ幸いです。
私のコードは以下の通りです:私に
float speedHorz = 0; //Horizontal starting speed.
float maxspHorz = 5; //Horizontal Max speed.
float speedVert = 0;
float maxspVert = 5;
float acceleration = 8; //How fast the object will reach maximum speed.
float deceleration = 12; //How fast the object will return to 0.
void Update()
{
playerMove();
}
public void playerMove()
{
//Up and Down, Acceleration
if ((Input.GetKey("s")) && (speedVert < maxspVert)) //If you press S and Verticl Speed is less than the max...
{
speedVert = speedVert - acceleration * Time.deltaTime; //Lower speed by acceleration, move down...
}
else if ((Input.GetKey("w")) && (speedVert > -maxspVert))
{
speedVert = speedVert + acceleration * Time.deltaTime;
}
//Up and Down, Deceleration
else
{
if (speedVert > deceleration * Time.deltaTime)
{
speedVert = speedVert - deceleration * Time.deltaTime;
}
else if (speedVert < deceleration * Time.deltaTime)
{
speedVert = speedVert + deceleration * Time.deltaTime;
}
else speedVert = 0 * Time.deltaTime;
}
//Left and Right, Acceleration
if ((Input.GetKey("a")) && (speedHorz < maxspHorz)) //If you are pressing the "a" key and speed is less than max speed...
{
//Move Left
speedHorz = speedHorz - acceleration * Time.deltaTime; //Accelerate negatively on the X axis, ie Move Left.
}
else if ((Input.GetKey("d")) && (speedHorz > -maxspHorz))
{
speedHorz = speedHorz + acceleration * Time.deltaTime;
}
//Left and Right, Deceleration
else
{
if (speedHorz > deceleration * Time.deltaTime)
{
speedHorz = speedHorz - deceleration * Time.deltaTime;
}
else if (speedHorz < deceleration * Time.deltaTime)
{
speedHorz = speedHorz + deceleration * Time.deltaTime;
}
else speedHorz = 0 * Time.deltaTime;
}
transform.position = new Vector2(transform.position.x + speedHorz * Time.deltaTime, transform.position.y + speedVert * Time.deltaTime);
}
Time.deltaTimeはコールによって異なりますか?もしそうなら、減速コードで速度を下げるのではなく、MinまたはMaxを入力して、負の速度が正にならないようにしてください。 – Martheen