Движение в игровом движке / Все что нужно знать / Godot Engine

  Рет қаралды 26,388

Фронтенд Паштет

Фронтенд Паштет

2 жыл бұрын

Полный урок о перемещении игровых объектов в игровых движках. Мы рассмотрим базовые принципы перемещения на основе формулы расстояния, а затем перейдем к более сложной теме - интерполяции.
Полный курс по Godot 4: stepik.org/a/137222
Мой дискорд сервер: / discord
Мой канал в телеграмм: t.me/frontend_pashtet
Я на Twitch: / frontend_pashtet

Пікірлер: 89
@MrGalyano
@MrGalyano 2 жыл бұрын
У вас ошибочка в картинке на 1:18. _physics_process() срабатывает 60 раз в секунду и не зависит от FPS, а вот _process уже выполняется каждый кадр и может быть быстрее или медленней в зависимости от выдаваемого FPS .
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Хороший поинт. Закрепляю коммент. Спасибо за поправку.
@danyefimow
@danyefimow 2 жыл бұрын
А ты хорош!)) Прям лучший контент по теме разработки игр в RU сегменте. Спасибо и удачи тебе!
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Это очень приятный комментарий. Спасибо за поддержку)
@fallinglight8564
@fallinglight8564 2 күн бұрын
Подача огонь, ты даже заморочился со сценой! :)
@listenheart5967
@listenheart5967 2 жыл бұрын
Красава, хороший материал.
@ChelSammi9837
@ChelSammi9837 2 жыл бұрын
Спасибо тебе большое за видео,я наконец-то понял как двигать персонажа..
@soundsbeard
@soundsbeard 2 жыл бұрын
крутой видос и крутую сцену подготовил
@Deeui
@Deeui 2 жыл бұрын
Вот что я называю "полезное видео". Не зря подписался на тебя.
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Очень рад это слышать. Спасибо за комментарий.
@asturmor7641
@asturmor7641 2 жыл бұрын
Хороший видос, классная подача! Продолжай вот в таком же духе)
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Постараюсь) Спасибо за комментарий
@blyadblyad6767
@blyadblyad6767 Жыл бұрын
Очень качественный урок и крутой проект для урока, прям ответственно к делу подошёл. Жду новые видосы!
@LeviiParen
@LeviiParen 2 жыл бұрын
Так держать! Удачи тебе
@Mitsumata
@Mitsumata 2 жыл бұрын
*Чувак, спасибо тебе!*
@papadenteam
@papadenteam Жыл бұрын
Спасибо! Отлично видео!
@_1mrscool11_9
@_1mrscool11_9 2 жыл бұрын
Оно того стоило! (Я про отсутствие стрима) А так полезный видос хоть и не все поймут его суть а ты меня на одну идею натолкнул
@Felex_Fox
@Felex_Fox 15 күн бұрын
Немного не понятно но очень интересно
@lol-et1fz
@lol-et1fz 2 жыл бұрын
У меня нет слов.......КРАСВА ))))))
@gencrud
@gencrud Жыл бұрын
Красота!
@user-gc2gt1mm5r
@user-gc2gt1mm5r 2 жыл бұрын
спасибо большое буду вникать
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
@SOTRUDNICHEK_
@SOTRUDNICHEK_ 2 жыл бұрын
О классно. Видео.
@na3try323
@na3try323 10 ай бұрын
тысячный лайк!
@user-pr9zw7rx7r
@user-pr9zw7rx7r 8 ай бұрын
Я не знал что 6 минут будут длится так долго!!!!!
@lol-et1fz
@lol-et1fz 2 жыл бұрын
Идеально объяснил 👌)))
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Даже Хейтер оценил 👌) achievement unlocked
@lol-et1fz
@lol-et1fz 2 жыл бұрын
@@frontend-pashtet 😊 оккуратней я могу и захейтить ))) От моего хейта досихпор блогеры не в себе )))
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
@@lol-et1fz понял
@lol-et1fz
@lol-et1fz 2 жыл бұрын
@@frontend-pashtet 😑)))
@NobodyHere539
@NobodyHere539 2 жыл бұрын
Есть ещё lerp, помним, любим
@egopos
@egopos 2 жыл бұрын
lerp это и есть linear_interpolate
@NobodyHere539
@NobodyHere539 2 жыл бұрын
@@egopos ну так в видео про эту функцию не слова не было просто.)
@user-ky5ds7mn8v
@user-ky5ds7mn8v 2 жыл бұрын
Я щяс перешел на этот движок есть такой вопросик можно ли сделать мультиплеер на движке
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Да, конечно. Народ делает сетевые игры. Вот тут есть пример и библиотека для упрощения разработки. Правда все на английском heroiclabs.com/blog/tutorials/godot-fishgame/index.html
@user-ky5ds7mn8v
@user-ky5ds7mn8v 2 жыл бұрын
Кстати через 2 дня проводится джем по разработке игр на годот Ну как будешь учавствовать?
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Если ты про Godot Wild Jam, то да, буду участвовать. Он каждый месяц проводится. Я участвовал в нем где-то год назад. Буду стримить его в эти выходные.
@user-ky5ds7mn8v
@user-ky5ds7mn8v 2 жыл бұрын
@@frontend-pashtet о это Круто я тоже буду учавствовать Не знай правда смогу ли сделать игру за 9 дней и честно говоря это мой первый джем где я буду учавствовать. Ну крч получится сделать игру хорошо если нет надо побольше поучится
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Воу. Это вообще прикольно, что мы участвуем. Удачи в джеме. В любом случае это будет хороший опыт. Я уверен в этом.
@captaingames12
@captaingames12 Жыл бұрын
я как-то не понимаю как это работает. Если мы объекту задаем каждый фрейм координату по "х" допустим 10, не должен ли он дойти до этой координаты и оставаться на том же месте?
@frontend-pashtet
@frontend-pashtet Жыл бұрын
В этом и суть, что ты задаёшь на 10, а меняешь постепенно. Например, 1,2,3,4 и так далее. Каждый фрейм насчитываешь значение, которое прошло тело.
@captaingames12
@captaingames12 Жыл бұрын
@@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 и больше не двигаться?
@Kinoblyfun
@Kinoblyfun Жыл бұрын
У меня болит голова))
@frontend-pashtet
@frontend-pashtet Жыл бұрын
Так и должно быть)
@user-ky5ds7mn8v
@user-ky5ds7mn8v 2 жыл бұрын
Блин ошибка кода пж подскажи что тут не так Var damaged = { "damaged":20, "is_fire_damage:true, "orydie":"arbalet" } funk _ready() var damag = damaged["damaged"]: if damag != 10: damag + 20 И блин удобнобы было если бы была группа вк туда бы можно было бы выкладывать ошибки и все что связано с годот
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Привет. Не очевидно, какая тут ошибка. Что Godot пишет при запуске кода? Что ты хочешь, чтобы получилось? Есть дискорд сервер discord.gg/tJxdsvHtBX и чат в телеграмм t.me/frontend_pashtet_chat
@Mitsumata
@Mitsumata 2 жыл бұрын
Инглиш подтяни, какой funk? Правильно func писать. Также вместо damage какой-то damag написан... так дело не пойдёт.
@neoddisofficial6337
@neoddisofficial6337 Жыл бұрын
Можете помочь пожалуйста с 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 буду ждать когда кто то ответит
@wexordante
@wexordante Жыл бұрын
Как лучше сделать пошаговую стратегию в 3 d ? Этот скрипт похож на RTS скрипт, не могу додуматься. Везде в 2 d, я слишком чайник чтобы понять. Да и Velocity везде было (
@frontend-pashtet
@frontend-pashtet Жыл бұрын
Я делал пошаговую стратегию в 3D. Была куча стримов на канале. Код игры открыт. Код под Godot 3 github.com/drxwat/goblins-game-gd Заходи в дискорд, если будут вопросы
@wexordante
@wexordante Жыл бұрын
@@frontend-pashtet спасибо
@user-sg9oj4re7n
@user-sg9oj4re7n Жыл бұрын
что, если я переписал первый пример, и при нажатии на клавишу объект просто кружится по оси?
@frontend-pashtet
@frontend-pashtet Жыл бұрын
Привет. Тут надо смотреть код. Можешь зайти к нам на сервер в дискорде. Я там отвечаю на технические вопросы. Плюс ребята с сервера помогали. Ссылка в описании есть
@frontend-pashtet
@frontend-pashtet Жыл бұрын
discord.gg/tJxdsvHtBX
@MicrNerd
@MicrNerd 2 жыл бұрын
Отличное видео, прям то, что надо. Тебе стоит делать шутки кринжовыми чтобы зубы сводило.
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Спасибо. Есть куда расти. Но я немного стесняюсь в откровенный кринж
@MicrNerd
@MicrNerd 2 жыл бұрын
@@frontend-pashtetПаштет у тебя такой пей-офф получается в шутках, как раз таки будто должен быть кринж, но не хватает смелости.
@nicsonkinellman8166
@nicsonkinellman8166 Ай бұрын
ну осталось сделать классику и интстансить обьект после проигрывания анимации
@egopos
@egopos 2 жыл бұрын
для меня это слишком умно
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Думаю, что-то не понятно из за темпа. Я старался как можно короче сделать видео
@lol-et1fz
@lol-et1fz 2 жыл бұрын
Ответь если не сложно.... Какой движок лучше (обширнее) для создания 2D игры, GMS2 или Godot Engine? За ранее Благодарю за ответ ))))
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
GMS2 не пробовал. Так что, сравнивать не могу. Но для 2d Godot хорош. Вряд ли упрешься в какие-то технические ограничения. Но GMS2 по слухам тоже очень хороший движок. Так что, просто попробуй сделать прототип простой игры на обоих и потом поймёшь для себя, что комфортней
@lol-et1fz
@lol-et1fz 2 жыл бұрын
@@frontend-pashtet хорошо, понял ))) Дело в том что я хочу сесть на одном движке и не прыгать с движка на другой движок по тысячи раз )))
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
@@lol-et1fz ничего плохого в этом нет. Все движки похожи в базовых функциях. Разный опыт только обогатит твои навыки. Но смотри сам. Я в каком-то смысле тоже любитель одной технологии)
@lol-et1fz
@lol-et1fz 2 жыл бұрын
@@frontend-pashtet ОК)
@lol-et1fz
@lol-et1fz 2 жыл бұрын
@Re_ Ты имеешь ввиду что Godot лучше чем Unity ?
@Alexey0328
@Alexey0328 Жыл бұрын
А есть материалы о том как передвинуть объект из точки А в точку Б для совсем тупых?))) Есть начальная координата Х и финальная координата Х. Ваш код с кликами вообще не понял, а тот код что в учебнике Godot в разделе "Интерполяция" - не работает.
@frontend-pashtet
@frontend-pashtet Жыл бұрын
Привет. Заходи в дискорд, там проще будет код обсудить discord.gg/DFBdWxsBkA
@Alexey0328
@Alexey0328 Жыл бұрын
@@frontend-pashtet спасибо что ответили, зашел посмотрел)). Но тут подумал, если я даже с такой ерундой справиться не могу, то, возможно, и не надо туда лезть. Пожалуй, rpg maker мой максимум))).
@Gostyr
@Gostyr 4 ай бұрын
коротко и не понятно
@RPTYPER
@RPTYPER 3 ай бұрын
Помогите кто-нибудь! Пж! Мне пишут, что у меня таблутация неверная, а я не знаю, как исправить.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)
@user-uy9lb5el2f
@user-uy9lb5el2f 2 жыл бұрын
Оказывается я был прав)
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
В чем?)
@user-uy9lb5el2f
@user-uy9lb5el2f 2 жыл бұрын
@@frontend-pashtet гайд по ходьбе)
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
@@user-uy9lb5el2f ахах) Это он самый
@haver2250
@haver2250 5 ай бұрын
Честно говоря - всё равно ничего не понимаю, даже что такое дельта 😢
@user-ud4mi1jp2b
@user-ud4mi1jp2b 2 жыл бұрын
Коммент 2
@popooppop
@popooppop 2 жыл бұрын
А че так можно было, я вобще новичек и не шарю тк гайдов очень мало. Я все такие плавные движения делал через аним плауер. Даже платформы на которые надо прыгать🤣
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Иногда animation player это то, что надо. Но теперь ты знаешь ещё пару способов 😁
@popooppop
@popooppop 2 жыл бұрын
@@frontend-pashtet я открыл доку с векторами и физикой, вот уже 2ой час играюсь)
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
@@popooppop ага, это прикольная штука. Я так доигрался до игры про летающий глаз)
@neoddisofficial6337
@neoddisofficial6337 Жыл бұрын
Я понял что я нечего не понял.
@frontend-pashtet
@frontend-pashtet Жыл бұрын
На этом мои полномочия все) Ну а если серьезно, то тема сложная. Тут и векторная алгебра, и интерполяции, и знания функций Godot. Так что, это норм, если не сразу разберёшься.
@zhamshidkaliev
@zhamshidkaliev 2 жыл бұрын
нужно уроки для бегинеров , ничего не понятно)
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
Стримы наверное попроще будут. Там и динамика другая.
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
@Re_ ну да, для начинающих важен интерфейс, запись экрана с кликами. Думаю, надо сделать такой урок
@frontend-pashtet
@frontend-pashtet 2 жыл бұрын
@Re_ судя по комментариям, у тебя хорошая подготовка. Уверен, ты очень быстро разберёшься с Godot.
@Lu4ikSvetaVoTme
@Lu4ikSvetaVoTme Жыл бұрын
Круто замонтажил
New Gadgets! Bycycle 4.0 🚲 #shorts
00:14
BongBee Family
Рет қаралды 10 МЛН
СҰЛТАН СҮЛЕЙМАНДАР | bayGUYS
24:46
bayGUYS
Рет қаралды 770 М.
Почему НЕ стоит браться за разработку игры мечты
9:26
Всё о Tilemap в Godot Engine 4
19:48
Oktopus Skills
Рет қаралды 34 М.
How to make a Video Game - Godot Beginner Tutorial
1:17:12
Brackeys
Рет қаралды 973 М.
Как я писал ИГРОВОЙ ДВИЖОК | Разработка игр | GameDev
5:38
Latest Nokia Mobile Phone
0:42
Tech Official
Рет қаралды 491 М.
How much charging is in your phone right now? 📱➡️ 🔋VS 🪫
0:11
Индуктивность и дроссель.
1:00
Hi Dev! – Электроника
Рет қаралды 1,6 МЛН
cool watercooled mobile phone radiator #tech #cooler #ytfeed
0:14
Stark Edition
Рет қаралды 7 МЛН