Движение в игровом движке / Все что нужно знать / Godot Engine
HTML-код
- Опубликовано: 10 фев 2025
- Полный урок о перемещении игровых объектов в игровых движках. Мы рассмотрим базовые принципы перемещения на основе формулы расстояния, а затем перейдем к более сложной теме - интерполяции.
Полный курс по Godot 4: stepik.org/a/1...
Мой дискорд сервер: / discord
Мой канал в телеграмм: t.me/frontend_...
Я на Twitch: / frontend_pashtet
У вас ошибочка в картинке на 1:18. _physics_process() срабатывает 60 раз в секунду и не зависит от FPS, а вот _process уже выполняется каждый кадр и может быть быстрее или медленней в зависимости от выдаваемого FPS .
Хороший поинт. Закрепляю коммент. Спасибо за поправку.
А ты хорош!)) Прям лучший контент по теме разработки игр в RU сегменте. Спасибо и удачи тебе!
Это очень приятный комментарий. Спасибо за поддержку)
Очень качественный урок и крутой проект для урока, прям ответственно к делу подошёл. Жду новые видосы!
Вот что я называю "полезное видео". Не зря подписался на тебя.
Очень рад это слышать. Спасибо за комментарий.
Подача огонь, ты даже заморочился со сценой! :)
Хороший видос, классная подача! Продолжай вот в таком же духе)
Постараюсь) Спасибо за комментарий
крутой видос и крутую сцену подготовил
Спасибо тебе большое за видео,я наконец-то понял как двигать персонажа..
Красава, хороший материал.
Оно того стоило!
(Я про отсутствие стрима)
А так полезный видос хоть и не все поймут его суть а ты меня на одну идею натолкнул
спасибо большое буду вникать
✊
Я не знал что 6 минут будут длится так долго!!!!!
Немного не понятно но очень интересно
*Чувак, спасибо тебе!*
О классно. Видео.
Так держать! Удачи тебе
Спасибо! Отлично видео!
У меня нет слов.......КРАСВА ))))))
Красота!
Есть ещё lerp, помним, любим
lerp это и есть linear_interpolate
@@egopos ну так в видео про эту функцию не слова не было просто.)
тысячный лайк!
У меня болит голова))
Так и должно быть)
В клиент-серверной игре наверняка к этому всему добавятся свои нюансы
Идеально объяснил 👌)))
Даже Хейтер оценил 👌) achievement unlocked
@@frontend-pashtet 😊 оккуратней я могу и захейтить )))
От моего хейта досихпор блогеры не в себе )))
@@lol-et1fz понял
@@frontend-pashtet 😑)))
для меня это слишком умно
Думаю, что-то не понятно из за темпа. Я старался как можно короче сделать видео
Отличное видео, прям то, что надо. Тебе стоит делать шутки кринжовыми чтобы зубы сводило.
Спасибо. Есть куда расти. Но я немного стесняюсь в откровенный кринж
@@frontend-pashtetПаштет у тебя такой пей-офф получается в шутках, как раз таки будто должен быть кринж, но не хватает смелости.
1:34 на этом моменте я сомневаюсь что смогу делать игры
коротко и не понятно
ну осталось сделать классику и интстансить обьект после проигрывания анимации
Я щяс перешел на этот движок есть такой вопросик можно ли сделать мультиплеер на движке
Да, конечно. Народ делает сетевые игры. Вот тут есть пример и библиотека для упрощения разработки. Правда все на английском heroiclabs.com/blog/tutorials/godot-fishgame/index.html
Кстати через 2 дня проводится джем по разработке игр на годот
Ну как будешь учавствовать?
Если ты про Godot Wild Jam, то да, буду участвовать. Он каждый месяц проводится. Я участвовал в нем где-то год назад. Буду стримить его в эти выходные.
@@frontend-pashtet о это Круто я тоже буду учавствовать Не знай правда смогу ли сделать игру за 9 дней и честно говоря это мой первый джем где я буду учавствовать.
Ну крч получится сделать игру хорошо если нет надо побольше поучится
Воу. Это вообще прикольно, что мы участвуем. Удачи в джеме. В любом случае это будет хороший опыт. Я уверен в этом.
Блин ошибка кода пж подскажи что тут не так
Var damaged = {
"damaged":20,
"is_fire_damage:true,
"orydie":"arbalet"
}
funk _ready()
var damag = damaged["damaged"]:
if damag != 10:
damag + 20
И блин удобнобы было если бы была группа вк туда бы можно было бы выкладывать ошибки и все что связано с годот
Привет. Не очевидно, какая тут ошибка. Что Godot пишет при запуске кода? Что ты хочешь, чтобы получилось?
Есть дискорд сервер discord.gg/tJxdsvHtBX
и чат в телеграмм
t.me/frontend_pashtet_chat
Инглиш подтяни, какой funk? Правильно func писать. Также вместо damage какой-то damag написан... так дело не пойдёт.
я как-то не понимаю как это работает. Если мы объекту задаем каждый фрейм координату по "х" допустим 10, не должен ли он дойти до этой координаты и оставаться на том же месте?
В этом и суть, что ты задаёшь на 10, а меняешь постепенно. Например, 1,2,3,4 и так далее. Каждый фрейм насчитываешь значение, которое прошло тело.
@@frontend-pashtet хммм. А как тогда при управлении персонажем он двигается
extends KinematicBody2D
const SPEED = 100
const FRICTION = 120
var velocity = Vector2.ZERO
func _physics_process(delta):
var input = Vector2.ZERO
input.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
input.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
input = input.normalized()
if input != Vector2.ZERO:
velocity = input * SPEED
else:
velocity = velocity.move_toward(Vector2.ZERO, FRICTION*delta)
print(velocity)
velocity = move_and_slide(velocity)
например с помощью этого кода. Не должен ли он достигнуть 100 и больше не двигаться?
А есть материалы о том как передвинуть объект из точки А в точку Б для совсем тупых?))) Есть начальная координата Х и финальная координата Х. Ваш код с кликами вообще не понял, а тот код что в учебнике Godot в разделе "Интерполяция" - не работает.
Привет. Заходи в дискорд, там проще будет код обсудить discord.gg/DFBdWxsBkA
@@frontend-pashtet спасибо что ответили, зашел посмотрел)). Но тут подумал, если я даже с такой ерундой справиться не могу, то, возможно, и не надо туда лезть. Пожалуй, rpg maker мой максимум))).
что, если я переписал первый пример, и при нажатии на клавишу объект просто кружится по оси?
Привет. Тут надо смотреть код. Можешь зайти к нам на сервер в дискорде. Я там отвечаю на технические вопросы. Плюс ребята с сервера помогали. Ссылка в описании есть
discord.gg/tJxdsvHtBX
Как лучше сделать пошаговую стратегию в 3 d ? Этот скрипт похож на RTS скрипт, не могу додуматься. Везде в 2 d, я слишком чайник чтобы понять. Да и Velocity везде было (
Я делал пошаговую стратегию в 3D. Была куча стримов на канале. Код игры открыт.
Код под Godot 3 github.com/drxwat/goblins-game-gd
Заходи в дискорд, если будут вопросы
@@frontend-pashtet спасибо
Можете помочь пожалуйста с 2D игрой, я хочу сделать простой платформер и там добавить платформу которая будет двигаться к примеру от одного края к другому и так бессконечное количество времени. Я вообще не знаю как это сделать. Также у меня проблемы с персонажем а именно анимация смерти, тоесть когда его убивают то он падает и умирает ливитируя над землей и я пробовал много чего сделать, бессполезно я и ему добавлял 2 коллизию делал так что когда он жив то 2 коллизия выключена а когда умер то включена, не помогало может я в коде напартачил или незнаю, но прошу помогите я вообще запутался... (я только начал учиться своими силами в этой сфере создавания игр и толком нечего не знаю.)
Код персонажа:
extends KinematicBody2D
const gravity = 600.0
const walk_speed = 200
const Floor = Vector2(0, -1)
const PLASMA = preload("res://Plasma.tscn")
var is_firing = false
var is_dead = false
var direction = 1
var motion = Vector2()
var jump = 450
func die():
is_dead = true
motion.x = 0
$AnimatedSprite.play("die")
$PlayerCollisionShape2D.set_deferred("disabled", true)
$DeadPlayerCollision.set_deferred("disabled", false)
func _physics_process(delta):
if is_dead == true:
motion.x = walk_speed * direction
$AnimatedSprite.play("walk")
if position.y > 810:
position.y = 0
if is_firing == true:
return
if Input.is_action_pressed("ui_left") and not Input.is_action_pressed("ui_right"):
motion.x =-walk_speed
$AnimatedSprite.flip_h = true
$Position2D.position.x = abs($Position2D.position.x) * -1
if is_on_floor():
$AnimatedSprite.play("walk")
elif Input.is_action_pressed("ui_right") and not Input.is_action_pressed("ui_left"):
motion.x = walk_speed
$AnimatedSprite.flip_h = false
$Position2D.position.x = abs($Position2D.position.x)
if is_on_floor():
$AnimatedSprite.play("walk")
else:
motion.x = 0
if is_on_floor():
$AnimatedSprite.play("idle")
if Input.is_action_pressed("ui_up") and is_on_floor():
motion.y = -jump
$AnimatedSprite.play("jump")
if Input.is_action_just_pressed("ui_accept") && is_firing == false && is_on_floor():
is_firing = true
$AnimatedSprite.play("fire")
motion.y += (gravity * delta)
motion = move_and_slide(motion, Floor)
func _on_AnimatedSprite_animation_finished():
if $AnimatedSprite.animation == "fire":
var plasma = PLASMA.instance()
plasma.direction = sign($Position2D.position.x)
plasma.position = $Position2D.global_position
get_parent().add_child(plasma)
is_firing = false
Код зомби (который убивает игрока):
extends KinematicBody2D
const SPEED = 100
const FLOOR = Vector2(0, -1)
const GRAVITY = 970
var velocity = Vector2()
var direction = 1
var is_alive = true
var is_attacking = false
func kill():
is_alive = false
velocity.x = 0
$AnimatedSprite.play("dead")
$CollisionShape2D.set_deferred("disabled", true)
$DeadCollision.set_deferred("disabled", false)
func _physics_process(delta):
if is_alive == true && is_attacking == false:
velocity.x = SPEED * direction
$AnimatedSprite.play("walk")
velocity.y += (GRAVITY * delta)
velocity = move_and_slide(velocity, FLOOR)
if is_on_wall():
change_direction()
func change_direction():
direction *= -1
$AnimatedSprite.flip_h = !$AnimatedSprite.flip_h
$Area2D/CollisionShape2D.position.x *= -1
func _on_Area2D_body_entered(body):
if is_alive && "Player" in body.name:
is_attacking = true
$AnimatedSprite.play("attack")
body.die()
func _on_AnimatedSprite_animation_finished():
if $AnimatedSprite.animation == "attack":
is_attacking = false
И код платформы который не хочет работать (точнее я не знаю как его написать, так скажем это больше огрызок от кода. ):
extends StaticBody2D
const SPEED = 100
#const FLOOR = Vector2(0, -1)
const GRAVITY = 5
var Motion = Vector2.ZERO
var direction = 1
func _physics_process(delta):
Motion.y += GRAVITY
Motion = move_and_slide(Motion, Vector2.LEFT)
а в коде с платформой проблема, тут функция move_and_slide выдает ошибку : built-in:12 - Parse Error: The method "move_and_slide" isn't declared in the current class. (и я тоже не знаю как её исправить...)
эхх надеюсь кто то поможет.
Мои связи:
Дискорд: Fuzzy#1697 или Fers#2357
буду ждать когда кто то ответит
Оказывается я был прав)
В чем?)
@@frontend-pashtet гайд по ходьбе)
@@ВторойкиборгЧеловек-Сидр ахах) Это он самый
Помогите кто-нибудь! Пж! Мне пишут, что у меня таблутация неверная, а я не знаю, как исправить.extends KinematicBody2D
var speed = 150
var jumpForce =300
var gravity = 700
var vel = Vector2()
func _physics_process(delta):
if Input.is_action_pressed("player_left"):
vel.x -= speed
elif Input.is_action_pressed("player_left"):
vel.x += speed
move_and_slide(vel, Vector2.UP)
Таблутация? Табуляция?
Короч, твой код должен иметь правильное количество табов, т.е. смотри:
func***:
if input.тырыпыры:
vel.xzxz
elif input.турупуру:
vel.xzxz
move_and_slide()
Ну и соблюдай табуляцию - пробелы зло.
Честно говоря - всё равно ничего не понимаю, даже что такое дельта 😢
Ответь если не сложно....
Какой движок лучше (обширнее) для создания 2D игры, GMS2 или Godot Engine?
За ранее Благодарю за ответ ))))
GMS2 не пробовал. Так что, сравнивать не могу. Но для 2d Godot хорош. Вряд ли упрешься в какие-то технические ограничения. Но GMS2 по слухам тоже очень хороший движок. Так что, просто попробуй сделать прототип простой игры на обоих и потом поймёшь для себя, что комфортней
@@frontend-pashtet хорошо, понял )))
Дело в том что я хочу сесть на одном движке и не прыгать с движка на другой движок по тысячи раз )))
@@lol-et1fz ничего плохого в этом нет. Все движки похожи в базовых функциях. Разный опыт только обогатит твои навыки. Но смотри сам. Я в каком-то смысле тоже любитель одной технологии)
@@frontend-pashtet ОК)
@Re_ Ты имеешь ввиду что Godot лучше чем Unity ?
А че так можно было, я вобще новичек и не шарю тк гайдов очень мало. Я все такие плавные движения делал через аним плауер. Даже платформы на которые надо прыгать🤣
Иногда animation player это то, что надо. Но теперь ты знаешь ещё пару способов 😁
@@frontend-pashtet я открыл доку с векторами и физикой, вот уже 2ой час играюсь)
@@under42wheel ага, это прикольная штука. Я так доигрался до игры про летающий глаз)
Я понял что я нечего не понял.
На этом мои полномочия все)
Ну а если серьезно, то тема сложная. Тут и векторная алгебра, и интерполяции, и знания функций Godot. Так что, это норм, если не сразу разберёшься.
нужно уроки для бегинеров , ничего не понятно)
Стримы наверное попроще будут. Там и динамика другая.
@Re_ ну да, для начинающих важен интерфейс, запись экрана с кликами. Думаю, надо сделать такой урок
@Re_ судя по комментариям, у тебя хорошая подготовка. Уверен, ты очень быстро разберёшься с Godot.
1:14
3:03
Коммент 2
Круто замонтажил