No video

02 FSM-контроллер для 2D персонажа

  Рет қаралды 2,506

Code with Max

Code with Max

Күн бұрын

В этом видео кода будет много, как и файлов с ним, иногда с запутанным отношением и связностью, но результатом будет создание полноценного конечного автомата (Finite State Machine) для управления персонажем и анимацией, что очень сильно упростить дальнейшее расширение его возможностей и функций.
Nathan Lovato
www.gdquest.co...
Контакты и поллержка
www.allme.one/...
#godot #FSM, #gdscript

Пікірлер: 67
@salovbokah
@salovbokah Жыл бұрын
Молодец, мужик, спасибо, что разжевал эту тему. Подписался, продолжай в том же духе!
@KA-zd4sn
@KA-zd4sn Жыл бұрын
Супер! Нигде такие уроки не найдёшь. Досмотрел до конца
@codewithmax
@codewithmax Жыл бұрын
Спасибо
@KA-zd4sn
@KA-zd4sn Жыл бұрын
@@codewithmax код переписал, разобрал. Все работает. Давай продолжение
@user-me1rk2xi8o
@user-me1rk2xi8o 4 ай бұрын
Дай бог тебе здоровья, спасибо тебе большое, мил человек!
@erelshinzhin5224
@erelshinzhin5224 Жыл бұрын
Мужик, ты очень крут Не знаю, что тобой движет, но похоже что есть просто такие добрые чуваки. Ты бы мог запросто запилить платные курсы и продавать их, но ты выкладываешь их бесплатно на Ютуб Какой же ты крутой емае ахахахха Всего тебе самого наилучшего, бро
@codewithmax
@codewithmax Жыл бұрын
Спасибо ;) Сейчас с переездом устаканится и продолжу
@asp_org
@asp_org 6 ай бұрын
Благодарю за ролик и особенно детальные объяснения.
@slasmo85
@slasmo85 9 ай бұрын
наконец нашел наидостойнейшее видео по fsm, низкий вам поклон за него. тяжело мне ООП дается в 39 лет, но благодаря вашему каналу я все же по немногу вникаю. спасибо еще раз!!!
@codewithmax
@codewithmax 9 ай бұрын
Спасибо
@slasmo85
@slasmo85 9 ай бұрын
в общем походу я тупой как пробка. нифига до меня реализация fsm через классы не доходит, придется по старинке мучаться через глобальные булевы переменные :(
@codewithmax
@codewithmax 9 ай бұрын
@@slasmo85 да ладно :) . Ну глобальный синглтон тоже выход. Я им даже чаще пользуюсь.
@slasmo85
@slasmo85 9 ай бұрын
@@codewithmax ну в будущем постараюсь все же разобраться что к чему, просто годо только 2 месяца изучаю, до этого вообще никакого геймдев опыта не было, думаю потому что слишком много инфы потребляю, потому и не смог с наскока разобраться.
@codewithmax
@codewithmax 9 ай бұрын
Пиши если че, здесь или в телеграмм. Постараюсь подсказать, что смогу. Реально нет времени каналом заниматься пока
@user-ij4ov7re8g
@user-ij4ov7re8g 6 ай бұрын
ох чел, какой большой ты пирожок, я тысчу лет искал нормальную реализацию этого, а ру ютубе никто такого не сделал, а на западном много смысла теряется при переводе, обнял, приподнял, спасиб
@codewithmax
@codewithmax 6 ай бұрын
Спасибо :) Я все еще надеюсь продолжить эту игрушку
@666GooglMan66
@666GooglMan66 Жыл бұрын
Вот это вещь
@jameshant7205
@jameshant7205 Жыл бұрын
Как все это понять... ничего в голове не укладывается ...
@vizziter1589
@vizziter1589 5 ай бұрын
Здравствуйте, что за ошибка Invalid set index 'state_machine_enemy' (on base: 'Node') with value of type 'Node (State Machine Enemy)'? Пытаюсь использовать FSM для врага, но выдает ошибку
@Nek-ROSE
@Nek-ROSE Жыл бұрын
Отличные уроки, а где информацию берешь для ролика (имею ввиду код)? Тупо документацию читаешь?
@codewithmax
@codewithmax Жыл бұрын
Код сам пишу. Да, документация, щас уже проще стало, чуть чуть ее дополнили, а когда альфа и бета были, читал справочник по классам на GitHub, даже где то в видео было, как изменился вызов сигналов в четвертой ветке. Сейчас официальная документация и практический опыт. docs.godotengine.org/en/stable/classes/index.html
@ext_0015
@ext_0015 9 ай бұрын
Я так и не понял. В скрипте State мы даем прямую ссылку на state machine или оставляем null?
@Dmitriy15486
@Dmitriy15486 Жыл бұрын
Интересно бы еще посмотреть про addons и vscode
@codewithmax
@codewithmax Жыл бұрын
А что vscode? Там кодить вместо встроенного редактора? Можно, конечно, но скажу честно - я попробовал и мне не понравилось.
@vorongo
@vorongo 11 ай бұрын
сколько раз ты переписывал код, но всё равно где-то ошибался? я: много, ОЧЕНЬ МНОГО. ну а если серьёзно, видео топ, но емае как же меня бесит,что я делаю всё точь в точь, но всё равно пишет ошибку😢, а в первый раз, у меня всё работало...(я пересмотрел видео 4 раза)
@codewithmax
@codewithmax 11 ай бұрын
Да регулярно я та делаю. В смысле ошибаюсь или даже просто опечатываюсь. Особенно когда начинаешь тупо копировать, то вообще можно забыть какую нибудь строку вставить.
@Dmitriy15486
@Dmitriy15486 Жыл бұрын
непонятна конструкция "owner as", т.е. это ссылка на владельца, это особенность синтаксиса GDscript? А в методах классов StatePlayer обязательно указывать приставку inner?
@codewithmax
@codewithmax Жыл бұрын
Конструкция as используется во многих языках, приведение к типу или приведение типов, еще называется
@thankjura
@thankjura Жыл бұрын
А разве не нужно после смены состояния делать return? А то получается проверяем что персонаж не на полу и меняем состояние на Air, при этом код выполняется дальше, где идет проверка на нажатую клавишу и состояние может вновь поменяться
@codewithmax
@codewithmax Жыл бұрын
Хм. Вероятно да, но не думаю, что это критично. Код будет выполнен до конца всего один раз, потом цикл проверок начнется с текущим состоянием. Но с точки зрения оптимизации стоит подумать. Доберусь до кода, гляну.
@dasan538
@dasan538 11 ай бұрын
у меня в узле idle, в 7 строке ошибка, Could not find type "State" in the current scope. (как решыть?)
@codewithmax
@codewithmax 11 ай бұрын
Это где происходит? В описании имени класса?
@tde5899
@tde5899 10 ай бұрын
Attempt to call function 'enter' in base 'null instance' on a null instance. дядя в чем может быть проблема?
@codewithmax
@codewithmax 10 ай бұрын
Не существует объекта у которого пытаешься вызвать функцию enter. Проверяй все ли правильно в коде
@clide8414
@clide8414 Жыл бұрын
Привет! Можешь пожалуйста по возможности опубликовать скрипты в файле или текстовом виде? Сам недавно перешёл на godot 4 и очень интересно. Огромное отличие от 3.5 ... Сижу на 36 минуте и персонаж не падает... Где-то ошибка. Листать код в видео очень неудобно. Спасибо за понимание, классные уроки!
@codewithmax
@codewithmax Жыл бұрын
github.com/trash-max/character_2d
@user-ew7pk5ez9y
@user-ew7pk5ez9y Жыл бұрын
Спасибо за такие уроки. А то ни как не мог найти по данной версии Godot. Но у меня появилась ошибка при запуске игры change_to(): Node not found: "Air" (relative to "/root/Player/FSM/Idle") и я не могу понять как её решить. что вообще можно сделать?
@codewithmax
@codewithmax Жыл бұрын
Имя ноды внимательно преверьте
@user-wi9dw1hg4u
@user-wi9dw1hg4u 11 ай бұрын
Подскажите пожалуйста , такая проблема появилась на моменте создания скрипта для состояние "idle" . Invalid set index 'velocity' (on base: 'Nil') with value of type 'Vector2'. показывает 5 строку где "player.velocity = Vector2..ZERO" в фильре переменны стека показывает что "player = null" но не могу понять почему , все делал по видео , пересмотрел его 3 раза. Спросил у чата гпт сказал что в StatePlayer может проблема с "player = owner as Player" как он сказал "узел, к которому прикреплен StatePlayer, не является экземпляром Player. В таком случае owner as Player вернет null". Подскажите пожалуйста как это решить , а-то все делал по видео, по идеи все должно быть так же .
@codewithmax
@codewithmax 11 ай бұрын
1. Версия движка какая? 2. Покажите файл state_player.gd
@user-wi9dw1hg4u
@user-wi9dw1hg4u 11 ай бұрын
@@codewithmax 1) 4.1.1 2) class_name StatePlayer extends State var player: Player func _ready(): player = owner as Player
@codewithmax
@codewithmax 11 ай бұрын
Тут вроде все ок. Надо бы остальные файлики со скриптами глянуть, state и idle. Но я хз, Как тут в комментариях такой объем кода будет отображаться. Или отправьте на почту мне, есть в описании канала. Или в телеграмм, тоже вроде ссылка была в заголовке. Постараюсь помочь.
@user-wi9dw1hg4u
@user-wi9dw1hg4u 10 ай бұрын
@@codewithmax буду продолжать дальше идти по вашим видео , спасибо большое за эти видео. Хотел у вас узнать будете ли вы делать так называемое "camera-window" , то есть чтобы камера при поворотах влево вправо не дергалась сразу и сначала персонаж немного пробегал . (возможно вы уже это сделали , я просто еще не дошел до этого )
@codewithmax
@codewithmax 10 ай бұрын
@@user-wi9dw1hg4u уже сделал. kzbin.info/www/bejne/e5bYi6Wtg7CGoa8si=MVqupUn-h3HQxTgZ На случай если Ютуб вырежет ссылку: настройка камеры в Godot. И кстати, надо проверить, может исправили в 4.1.1 и не надо уже огород городить
@Ο_Δάσκαλος_Ρούνων
@Ο_Δάσκαλος_Ρούνων Жыл бұрын
Видео очень полезно. Но у меня гигантская проблема, почти что в любой момент он может повесить на что угодно и где угодно красную строчку. Может потому, что у меня Godot 4.0.3, а не просто 4? Пишу всё так же, как и на видео, проверяю по несколько раз.
@codewithmax
@codewithmax Жыл бұрын
Нет, большой разницы в этих версиях нет. А что он за ошибку пишет?
@Ο_Δάσκαλος_Ρούνων
@Ο_Δάσκαλος_Ρούνων Жыл бұрын
@@codewithmax в state_player там где var player: Player (красное) и player = owner as Player (красное) ошибка Could not find type "Player" in the current scope.
@codewithmax
@codewithmax Жыл бұрын
@@Ο_Δάσκαλος_Ρούνων Player надо как класс обьявить
@Ο_Δάσκαλος_Ρούνων
@Ο_Δάσκαλος_Ρούνων Жыл бұрын
@@codewithmax перезашёл в проект, стало нормально. Ничего не понял
@Ο_Δάσκαλος_Ρούνων
@Ο_Δάσκαλος_Ρούνων Жыл бұрын
@@codewithmax но теперь новая ошибка. В скрипте player где class_name Player Class "Player" hides a global script class.
@isa412you
@isa412you 10 ай бұрын
Parser Error: Too few arguments for "enter()" call. Expected at least 1 but received 0. (В чём ошибка?)
@codewithmax
@codewithmax 10 ай бұрын
Словарь нужно передать как аргумент
@tde5899
@tde5899 10 ай бұрын
@@codewithmax че
@EFROG0
@EFROG0 11 ай бұрын
Подскажите что делать, в скрипте idle пишет, что не находит переменную state_machine.
@codewithmax
@codewithmax 11 ай бұрын
Объявить ее :)
@d_m_on4348
@d_m_on4348 9 ай бұрын
у меня @onready var state: State = get_node(start_state) ошибка Could not find type "State" in the current scope.
@codewithmax
@codewithmax 9 ай бұрын
State нужно объявить как имя класса
@inoyashiro3059
@inoyashiro3059 6 ай бұрын
У меня у одного такой баг если одновременно нажать прыжок и влево или вправо и не отпуская пробела нажимать влево и вправо то персонаж полетит
@codewithmax
@codewithmax 6 ай бұрын
Ох ты. Надо попробовать. В теории не должно быть, там же проверка is_on_floor, но хз…
2D character with Godot 4
1:30
Code with Max
Рет қаралды 1,6 М.
Области столкновений в Godot
14:22
Code with Max
Рет қаралды 1 М.
Gli occhiali da sole non mi hanno coperto! 😎
00:13
Senza Limiti
Рет қаралды 16 МЛН
Comfortable 🤣 #comedy #funny
00:34
Micky Makeover
Рет қаралды 17 МЛН
Box jumping challenge, who stepped on the trap? #FunnyFamily #PartyGames
00:31
Family Games Media
Рет қаралды 33 МЛН
Finite State Machines in Godot 4 in Under 10 Minutes
7:16
Bitlytic
Рет қаралды 267 М.
Boss Fight - Finite State Machine - Godot 4
18:10
16BitDev
Рет қаралды 24 М.
Делаем fireball для NPC (GODOT)
17:50
Code with Max
Рет қаралды 765
Паттерн состояние в unity 3D
12:40
Максим Крюков
Рет қаралды 21 М.