Помогите со скриптом в годот 4.2.1, не работает код от чела который сидит на 3.4.2
сама проблема заключается в том, что не хочет работать move_and_slide(vel,Vector3.UP)
код:
extends CharacterBody3D
var accel = 8 #ускорение
var speed = 12 #скорость
var jump = 9 #сила прыжка
var sens = 0.1 #чувствительность камеры
var _delta #дельта для фикса фпс
var direction = Vector2() #направление
var vel = Vector3() #скорость
var gravity = -22 #гравитация
var max_grav = -30 #максимальная скорость падения
@onready var head = $head
func _ready():
#ЗАХВАТЫВАЕМ КУРСОС ЧТОБЫ СМОТРЕТЬ
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _physics_process(delta):
#ВЫЗЫВАЕМ ФУНКЦИЮ ДВИЖЕНИЯ
_delta = delta #определяем дельта для функций
dir()
#ФУНКЦИЯ СМОТРЕНИЯ
func _input(event):
#если эвент = движение мыши то:
if event is InputEventMouseMotion:
var movement = event.relative
#поворот вверх и вниз (только голову)
head.rotation.x += -deg2rad(movement.y * sens) НЕ МОЖЕТ ОПРЕДЕЛИТЬ reg2rad
#чтобы не делать бэкфлип
head.rotation.x = clamp(head.rotation.x , deg2rad(-90), deg2rad(90)) НЕ МОЖЕТ ОПРЕДЕЛИТЬ reg2rad
#поворот вправо влево
rotation.y += -deg2rad(movement.x * sens) НЕ МОЖЕТ ОПРЕДЕЛИТЬ reg2rad
#функция движения
func dir():
direction = Vector2(0,0)
#определяем в какую сторону идти
if Input.is _action_pressed("+w"):
direction.y -= 1
elif Input.is _action_pressed("+s"):
direction.y += 1
if Input.is _action_pressed("+a"):
direction.x -= 1
elif Input.is _action_pressed("+d"):
direction.x += 1
#нормализуем чтобы направление не сбивалось
direction = direction.normalized().rotated(-rotation.y)
#вычисляем скорость с помощью направления
vel.x = lerp(vel.x, direction.x * speed, accel * _delta)
vel.z = lerp(vel.z, direction.y * speed, accel * _delta)
#гравитация в ход
vel.y += gravity * _delta
#чтобы слишком сильно не улетать
if vel.y < max_grav:
vel.y = max_grav
#если мы на земле и нажимаем пробел то:
if Input.is _action_just_pressed("+space") and is_on_floor():
vel.y = jump #прыжок
move_and_slide(vel,Vector3.UP) #двигаемся ЭТА СТРОЧКА НЕ РАБОТАЕТ
if is_on_floor() and vel.y < 0: #если мы стоим на полу значит мы не падаем :D
vel.y = 0
не может определить reg2red и move_and_slide()
В Godot 4 rad2deg и deg2rad теперь заменена на rad_to_deg и deg_to_rad, а move_and_slide теперь не имеет аргументов. Метод move_and_slide передвигает тело за счёт встроенной в CharacterBody3D переменной velocity. Самое простое решение в ситуации с move_and_slide:
velocity = vel
move_and_slide()
Вот СЮДА пиши вопрос