#c# #unity3d
#c# #unity3d
Вопрос:
Итак, мои прыжки непоследовательны, в основном, каждый раз, когда я нажимаю пробел, персонаж прыгает на разные высоты, даже когда стоит на месте (не двигаясь влево и вправо), почему это?
вот мой код:
public bool onGround = false;
public float JumpHeight;
public Rigidbody2D gravidade;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (onGround == true)
{
if (Input.GetKey(KeyCode.Space))
{
gravidade.AddForce(new Vector2(0, JumpHeight * Time.deltaTime), ForceMode2D.Impulse);
}
}
}
void OnCollisionEnter2D(Collision2D outro)
{
if (outro.gameObject.CompareTag("ground"))
{
onGround = true;
}
}
void OnCollisionExit2D(Collision2D outro)
{
if (outro.gameObject.CompareTag("ground"))
{
onGround = false;
}
}
Комментарии:
1. поскольку временная дельта меняется — вы применяете одноразовую силу, а не непрерывное движение, поэтому, я думаю , вам следует просто исключить дельту?
Ответ №1:
Вы не должны умножать на дельта-время при применении одноразовой силы.
Ответ №2:
Time.deltaTime
это время завершения в секундах с момента последнего кадра. Проверьте документацию
Это время не является постоянным. Единоличное поведение.FixedUpdate использует fixedDeltaTime вместо deltaTime, это fixedDeltaTime и FixedUpdate обычно используются для физики, и это довольно сложная тема.
Используйте постоянное значение вместо Time.deltaTime
, чтобы всегда иметь одинаковую высоту прыжка.
Комментарии:
1. Обратите внимание, что вы можете и, согласно документам, должны использовать deltaTime и в FixedUpdate, потому что на устройстве, где исправленные обновления просто не могут выполняться достаточно быстро (или во время задержек, которые иногда возникают на любой машине), deltaTime будет правильно адаптироваться, в то время как fixedDeltaTime буквально постоянен (за исключением определяемого пользователем влиянияпо шкале времени). Однако вы правы, как и @Piggy, сказал, что одноразовые силы не следует масштабировать.
Ответ №3:
Это отличается от того, что оно вычисляется исходя из deltaTime, которое не совпадает (время между двумя отображаемыми кадрами, если я не ошибаюсь), и каждый раз оно дает немного другое значение, которое в сочетании с умножением имеет большее отклонение от среднего. Надеюсь, я помог прояснить это, приветствия!