Top.Mail.Ru
Ответы

Помогите со скриптом в годот 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:

12
 velocity = vel
move_and_slide() 
Аватар пользователя
Искусственный Интеллект

Вот СЮДА пиши вопрос