Я пытаюсь создать 2D автомобильную игру. Я хочу, чтобы играть было весело, и хотел, чтобы моя машина замедлялась, когда я испытываю «а» или «d», но если я просто замедляю свою машину, она полностью останавливает ее. Я попытался умножить его на большее число, но ничего не помогло.
public class CarMovement : MonoBehaviour
{
Rigidbody2D rb;
Vector2 moveDirection;
public Transform goPoint;
public float carSpeed;
public float coolAngularVelocity;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
moveDirection = goPoint.position - gameObject.transform.position;
if (Input.GetButton("Fire1"))
{
rb.AddForce(moveDirection * carSpeed * Time.deltaTime);
}
if (Input.GetKey("a"))
{
rb.angularVelocity = coolAngularVelocity;
rb.velocity *= 0.95f * Time.deltaTime;
}
else if (Input.GetKey("d"))
{
rb.angularVelocity = -coolAngularVelocity;
rb.velocity *= 0.95f * Time.deltaTime;
}
else
{
rb.angularVelocity = 0.0f;
}
}
}
Даже без Time.deltaTime
, снижающего скорость на 5%, каждый кадр все равно будет почти очень быстро останавливать машину .. после 60 кадров (предположительно 1 секунда) у вас будет около 5% от исходной скорости ... возможно, вам лучше применить это только один раз в GetKeyDown
, например
я сделал его 0.995f, и он отлично работает
Я не уверен в используемых значениях, но предполагая, что
Time.deltaTime
- это0.016
(60 кадров в секунду), аrb.velocity
изначально равен 100, затем100 * 0.95 * 0.016 == 1.52
. Затем в следующем кадре1.52 * 0.95 * 0.016 == 0.0231
, в следующем кадре0.0231 * 0.95 * 0.016 == 0.0003511
и т. д. Через 25 кадров, скорость равна 0, что при 60 кадрах в секунду будет 0,4 секунды. Уже через 3 кадра это довольно незначительно.