Если мы посмотрим на ваш код, оператор проблематики c должен быть здесь:
rb2d.velocity = new Vector2(speed * direction * Time.deltaTime, rb2d.velocity.y);
Одна из этих трех переменных должна быть равна нулю, чтобы вызвать вашу проблему.
Потенциальная проблема 1: direction
Вы, кажется, устанавливаете direction
только один раз, в Start()
:
direction = Input.GetAxisRaw("Horizontal");
Возможно, вы не нажимаете какие-либо клавиши / не перемещаете джойстики в кадре, который сцена начинается. Это означает, что direction
заканчивается 0 и больше никогда не изменяется.
Либо измените свою строку на
rb2d.velocity = new Vector2(speed * Time.deltaTime, rb2d.velocity.y);
(исключая direction
), либо переместите оператор назначения направления в Update()
метод.
Потенциальная проблема 2: Time.deltaTime
Как сказал @Daniel в комментариях, оператор Time.deltaTime
может быть проблематичным c.
- Проверьте настройки вашего проекта / другие сценарии, чтобы убедиться,
Time.timeScale
не равно нулю. - Вы можете удалить
Time.deltaTime
, если # 1 не работает, но я согласен с вами, что здесь должно быть утверждение, чтобы игра оставалась последовательной во всех частотах. Попробуйте изменить Update()
на FixedUpdate()
; если вы сделаете это, вам нужно будет использовать Time.fixedDeltaTime
вместо.
Как отлаживать в будущем
Чтобы отладить эту проблему в будущем, попробуйте вставить точку останова в проблемной области. c линия и присоединение вашей IDE к Unity. Если вы наведите курсор на каждую из переменных, вы сможете увидеть, какая переменная равна нулю.