Обратите внимание на direction
:
var direction=Vector3.ZERO
# ...
func _process(delta):
Vector3.ZERO
if Input.is_action_pressed("mf"):
direction-=transform.basis.z
elif Input.is_action_pressed("b"):
direction+=transform.basis.z
direction=direction.normalized()
move_and_slide(direction*speed,Vector3.UP)
Он начинается как ZERO
. Затем вы нажимаете один из распознанных входов и изменяете его. Это больше не ZERO
после ввода.
Конечно, последующие исполнения _process
не войдут в ветки, в которых вы изменяете direction
. Однако direction
сохранил свою ценность.
Эта строка будет работать независимо от ввода:
move_and_slide(direction*speed,Vector3.UP)
Он не двигается, когда direction
равен ZERO
. Но опять же, после первого ввода direction
больше не ZERO
.
Я полагаю, вы хотели написать direction = Vector3.ZERO
в первой строке _process
.
Напоминаю обратить внимание на свои предупреждения:
- Вы не используете
delta
. Может означать, что код не компенсирует изменения частоты кадров.
- Вы отдельное выражение (
Vector3.ZERO
). Это ничего не делает. Вы хотели что-то там сделать?
- Вы отбрасываете возвращаемое значение
move_and_slide
. Честно говоря, я обычно говорю Годо игнорировать это.
Иметь свой скрипт без предупреждений - хороший знак. Просмотрите их. И если вы решите, что все в порядке, вы можете сказать Годо игнорировать их (это можно сделать с помощью комментария # warning-ignore:...
. См. система предупреждений GDScript). Если указать Godot игнорировать предупреждения, будет легче заметить появление нового предупреждения.
Что-то еще, я считаю, что этот код должен быть в _physics_process
. Это из move_and_slide
документации < / а>:
Этот метод следует использовать в Node._physics_process (или в методе, вызываемом Node._physics_process), поскольку он автоматически использует значение дельты физического шага в вычислениях. В противном случае симуляция будет работать с неверной скоростью.
person
Theraot
schedule
09.04.2021