Меня спросили, что такое левел арт?
Это художественное оформление уровня.
В нашей игре «Среди Волн» мы сочетаем 2д и 3д графику. Вот так выглядит сцена в игровом движке Unity3D
Это художественное оформление уровня.
В нашей игре «Среди Волн» мы сочетаем 2д и 3д графику. Вот так выглядит сцена в игровом движке Unity3D
Да-да, в середине 2023 года я начала свой путь в небольшой инди студии. Я не программист, не художники, не геймдизайнер, я с нуля учусь тому, чтобы сделать игру. Я кончено не одна и верю, что благодаря нашей команде, осилю этот путь. Ну что, отправимся со мной в путешествие среди волн!
Приветствую всех. Подскажите пожалуйста. Натолкнуло меня на этот вопрос волна приложений "честная цена".
Допустим, новичок хочет быть программистом - делать небольшие игры. Но при этом понимает, что игродел - это скорее хобби, а хотелось бы в дальнейшем какую-никакую, а копейку за свою работу получать, а кому этого бы не хотелось?
Почему-то мне показалось, что будущее за вебом и мобильной разработкой. Логика в целом такая, что даже на пикабу если полистать посты, то и дело можно увидеть, как кто-то написал приложение за пару часов, кто-то игру какую-то онлайн делает, кто-то сайт запилил на коленке за день. Создается иллюзия, что это более возможно и доступно для обычного новичка, потому как постов о полновесных проектах серьезных не так уж и много.
Но, начиная изучать что-то из этого, понимаешь - что-то тут не то.
Из популярных языков - это либо, огромный локомотив типа С# и .NET, на котором можно сделать абсолютно ВСЁ, но в то же время и ничего, потому как реализация через фреймворки определенных задач будет похожа на забивание гвоздя отверткой.
Либо это легкий и непринужденный инструмент, вроде Python, на котором можно сделать тоже абсолютно ВСЁ, но это всё будет несерьезным и легковесным, скорее как дополнение к чему-то.
Либо это совсем какие-то узконаправленные языки, на которых кроме определенной задачи ничего и не сделаешь. Вот создан язык, чтобы на нем сайты делать - вот и делай на нём только сайты.
Казалось бы, всё просто, так оно и работает, в одиночку никто проекты не разрабатывает и в проектах как раз и есть условные 3 человека, которые знают все эти 3 разные технологии и объединяют в единое целое. НО!
НО! Тогда кто все эти люди, которые за вечер клепают свои альфа проекты? Они тебе и игры запилят, и сайты, и десктоп, и андроид приложения. И вообще оказывается это всё они пилят после просмотра пары роликов на ютуб. Но не могут же они знать абсолютно все технологии и языки, чтобы так легко переключаться с одного на другой?
И так с абсолютно каждым языком. У кого ни спроси - это всегда какие-то абстрактные ответы по типу, что для каждой задачи свой язык.
Неужели среди программистов, где чуть ли не правило - не изобретать велосипед, если его уже сделали до тебя, до сих пор нет понятного примерного плана пути для начинающего? Не того road map, где стрелочками отмечены абсолютно все существующие технологии по определенной сфере, а что-то понятное, то через что проходили все, прежде чем стать профессионалами, прежде чем начать делать что-то своё?
Не хочется же быть тем человеком, который потратит, скажем, пару месяцев на изучение языка, а оказывается его никто и не использует в реальной деятельности. Или узнать, что то, над чем ты мучался месяцы и кучей кода на другом языке делается за пару минут.
P. S. Я знаю, что сейчас в IT не войти, надо работать на заводе, а на 100 резюме джунов приходится всего 1 вакансия. У меня другая работа, которая устраивает. Это скорее попытка узнать, какую ошибку я совершил в молодые годы, когда выпустился из техникума со специальностью "информационные технологии", где максимум тебя научили писать "hello, world" на двух разных ЯП, а из-за обилия выбора направлений в дальнейшем я запутался, заблудился и не воспользовался шансом, когда он еще был.
Несмотря на капризы погоды, лето неумолимо приближается. Значит, занятия в спортивном зале или домашние тренировки получится заменить на активности под открытым небом. Собрали для вас товары, которые сделают уличные воркауты интереснее, увлекательнее и полезнее.
Мегамаркет дарит пикабушникам промокод килобайт. Он дает скидку 2 000 рублей на первую покупку от 4 000 рублей и действует до 31 мая. Полные правила здесь.
В компактную поясную сумку поместятся телефон, ключи, кошелек или другие нужные мелочи. Во время тренировки все это не гремит и не мешает, но всегда находится под рукой. Материал сумки прочный и влагонепроницаемый, вещи в ней защищены от повреждений, царапин или пота.
С фитнес-резинкой можно тренировать все группы мышц: руки, ноги, кор, ягодицы. А еще она облегчает подтягивания и помогает мягко растягиваться. В сети можно найти огромное количество роликов с упражнениями разной степени сложности. Нагрузка легко дозируется: новичкам подойдет резинка с сопротивлением до 23 кг, опытным атлетам — до 57 кг. При этом оборудование максимально компактно и поместится даже в небольшую сумку.
Для тех, кому надоели обычные тренировки. Слэклайн — это стропа шириной 50 мм, с помощью которой осваивают хождение по канату. Тренажер учит сохранять баланс, прокачивает координацию и концентрацию, а еще дает отличную нагрузку на спину, руки и ноги.
Настольный теннис — простой в освоении вид спорта, который отлично помогает размяться и тренирует скорость реакции. В комплект входят две ракетки, три мяча, сетка, накладка и чехол — все, что нужно, чтобы поиграть вечером во дворе с другом или устроить небольшие соревнования. Этот недорогой набор подойдет именно для развлечения и веселья, устанавливается почти на любой стол.
Еще один вид спорта, которым можно заниматься, даже не имея серьезной подготовки — бадминтон. С набором от Wish Steeltec вы сможете потренировать силу удара, побегать и просто хорошо провести время. Детали яркие, так что их трудно потерять даже на природе. Леска натянута прочно, ресурса ракеток должно хватить не на один сезон.
Фрисби воспринимается как простое пляжное развлечение. Тем не менее перекидывание друг другу тарелки задействует все группы мышц и развивает скорость реакции. Эта тарелка летит далеко и по понятной траектории — отличный снаряд для начала. Кстати, фрисби — это еще и ряд спортивных дисциплин со своими правилами и техническими сложностями, так что игра с друзьями может перерасти в серьезное увлечение.
Стильный мяч из износостойкой резины отлично подходит для уличных тренировок. Вы сможете поиграть компанией в баскетбол или стритбол или просто отработать броски. При производстве используется технология сбалансированного сцепления: это значит, что снаряд не сбежит от вас и будет двигаться по стабильной траектории.
Футбол — один из самых популярных в России видов спорта. Играя, можно отлично побегать, потренировать меткость и отработать взаимодействие в команде. Футбольный мяч Torres Striker выполнен из качественного полиуретана и резины и выдержит не один десяток матчей, не потеряв упругости. Отличная балансировка и оптимальный размер делают его подходящим как для взрослых, так и для подростков. Он достаточно тяжелый, почти как в профессиональном спорте, так что совсем малышам не понравится.
Пляжный или обычный волейбол? А может быть, пионербол, как в детском лагере? Мяч TORRES SIMPLE COLOR подойдет для любой из этих игр. Камера отлично держит давление, поэтому вам не придется постоянно подкачивать его, а качественные материалы (полиуретан и бутил) сохраняют все характеристики даже при интенсивном использовании.
Многоскоростной велосипед с рамой 19-го размера подойдет как мужчинам, так и женщинам. Это отличный вариант для новичков: модель доступная, удобная. Поможет понять, нравится ли вам велоспорт. Конструкция велосипеда позволяет ездить по дорогам разных типов, поэтому вы сможете перемещаться по городу или отправиться в поход. Есть складной механизм — велосипед с ним легко возить в машине, на электричке и просто хранить в кладовке.
Более продвинутая модель для тех, кто уже оценил прелесть движения на двух колесах. Геометрия велосипеда предполагает вертикальную посадку. Это обеспечивает более удобное положение тела, чем на других байках. В конструкции предусмотрены детали для комфорта и безопасности: пружинная вилка с ходом 100 мм, сервисная подводка тросов и дисковые гидравлические тормоза.
Если вы не фанат велоспорта, но хотите получить свою дозу физической нагрузки, перемещаясь по городу, выбирайте самокат. В модели PLANK Magic 200 есть регулировка руля по высоте, надежные тормоза и прочная увеличенная дека из алюминия. Когда вы катаетесь на самокате, работают мышцы ног, ягодиц, спины и живота, а заодно добираетесь, куда нужно. Если вы решите сделать паузу в тренировках, самокат легко складывается для хранения.
Любая активность на свежем воздухе требует хорошей обуви, специально сделанной для занятий спортом. Яркие кроссовки Hoka RINCON 3 с облегченным весом амортизируют, снижают нагрузку на суставы. Выраженный рельеф подошвы обеспечивает сцепление с поверхностью вне зависимости от того, где проходит тренировка: на специальной площадке, асфальте или грунте.
Легкие женские кроссовки из линейки Clifton подходят для занятий на твердых покрытиях. Дышащий сетчатый верх поддерживает вентиляцию стоп, чтобы можно было тренироваться даже в жару. Подошва из легкой пены EVA гасит силу ударов. Кроссовки беговые, подходят для тренировок на длинных дистанциях.
Во время занятий на свежем воздухе важно защитить голову от перегрева. С этим отлично справится легкая и светлая бейсболка — например, от GLHF. Она удобно сидит на голове, не сваливается и не отвлекает от занятий, благодаря сетке голова меньше потеет. Козырек жесткий и не мнется.
Не забудьте защитить кожу от солнца — чтобы не было мучительно больно на следующий день после тренировки под открытым небом. В этом поможет крем против пигментных пятен с сильной защитой от ультрафиолета SPF50. Водостойкая текстура легко наносится и быстро впитывается, действует два часа — потом крем нужно обновить.
Удобные и стильные солнцезащитные очки защищают глаза благодаря фильтру UV400, который поглощает до 99.99% ультрафиолета. Они выполнены из легких материалов и плотно прилегают к голове. Ударопрочные поликарбонатные линзы с антибликовым покрытием подходят для разных видов спорта.
Используйте промокод килобайт на Мегамаркете. Он дает скидку 2 000 рублей на первую покупку от 4 000 рублей и действует до 31 мая. Полные правила здесь.
Реклама ООО «МАРКЕТПЛЕЙС» (агрегатор) (ОГРН: 1167746803180, ИНН: 9701048328), юридический адрес: 105082, г. Москва, ул. Спартаковская площадь, д. 16/15, стр. 6
Для тех кто первый раз читает мой гоблинский блог - расскажу кратко что тут происходит. Я сам являюсь зеленым новичком в разработке игр и в своем блоге описываю этапы изучения столь сложного дела. На данный момент - это работа с движком Godot 4.
Чтобы не мучать вас длинными статьями, я разбиваю этот путь на кучу мелких блоков. Один пост - одна механика движка. Все гоблинские заумные слова расшифровываются на человеческий, так что даже пациент из Кащенко поймет о чем речь. Погнали!
● Узлы, сцены и прочие слова не связанные с BDSM - это интерфейс Godot 4:
▸Наглядно показываю что и где
Основа движка Godot - это узлы и их древо. Блоки могут быть самого разного назначения, от визуального изображения, до настроек звука. Сцена - это отдельная группа узлов. Она нужна чтобы структурировать элементы и не путаться. Например, можно создать отдельную сцену с узлами нашего персонажа, а после добавлять эту сцену как узел в другую.
Создадим сцену нашей карты и назовем ее World. Для этого выбираем "2D сцена" как на скрине выше. Теперь можем добавить к сцене дочерний узел, нажав на плюсик. В поиске ищем TileMap - это узел для работы с тайл-сетами будущей карты.
● Что такое TileMap:
TileMap - это крайне полезный инструмент, который позволяет создать автоматическое заполнение карты. В разделе TileSet выбираем новый, внизу выбираем "Набор тайлов" и в открывшемся окне загружаем заранее подготовленный файл.
▸Шаблон для создания тайл-сета
Тайл-сет - это набор элементов из которых будет состоять будущая карта. Его можно нарисовать или поступить как истинный гоблин и взять ассеты в интернете. Чтобы не перетаскивать каждый кусок этого набора в нашу сцену, мы настроим автоматическое заполнение.
● Настройка рисования карты в TileMap:
В правом блоке узла TileMap вы найдете вкладку "Terrain Sets" (набор местности). В ней мы нажимаем "Добавить элемент" и в открывшемся блоке снова жмем "Добавить элемент". Теперь в центральном блоке выбираем вкладку "Рисовать" -> "Свойства рисования" - > Terrains.
▸Настройка местности
В обоих выделенных вкладках выбираем созданный нами элемент Terrain. С его помощью мы настраиваем области тайл-сета. Именно по ним Godot определяет какой кусок ставить следующим.
▸Настроенный TileMap
● Зоны столкновения для TileMap:
Помимо визуального изображения, нам нужно добавить для карты физический слой. Выбираем Physics Layer и добавляем новый элемент. Далее в разделе рисования выбираем "Физика" и наш слой. Так как наша карта состоит из блоков - выделаем каждый квадратом.
Теперь другие объекты будут видеть нашу карту и воспринимать ее как физическое препятствие.
● Как работает настроенный TileMap:
▸Рисуем что хотим
Теперь мы можем буквально рисовать карту, создавая любые формы. Алгоритм определяет какую часть нашего тайл-сета ставить в зависимости от соседних элементов. Просто води курсором с зажатой ЛКМ, а Godot сделает все остальное.
▸А вот это уже что-то похожее на элемент игры
Создание основы для уровня теперь занимает всего пару минут. Но помимо карты нам нужен наш персонаж, опасности и условия для завершения уровня. Этим мы займемся в следующем уроке.
Надеюсь гоблин смог пояснить за механику тайлов и вы смогли дочитать эту графоманию до конца.
✓ Зеленые новички - крепитесь и подписывайтесь, скоро новая статья.
✓ Опытные шаманы - запасайтесь успокоительным, ибо дальше будет еще куча попыток освоить gamedev.
✓ Ну и все кто имеет свое мнение, поддержку или усмешку - пишите комменты!
Уже неделю моя гоблинская тушка не подавала признаков жизни на Пикабу. Все кто думали что я сдох - не дождетесь, я мудитировал и искал знания в молитвах Горку и Морку. В переводе на человеческий - смотрел и читал обучающие материалы по Godot.
Проблема состоит в том, что проще выдать замуж троллиху, чем найти годный и главное понятный материал по данному движку на русском языке. Конечно, есть какие то азы, но дальше чем кривое управление платформера они не уходят, либо уже мне как новичку становится непонятно.
На помощь приходит всеми любимый зарубежный Ютуб и переводчик видео от Яндекса, наткнулся на пару каналов где информацию доносят более-менее доходчиво. И так, чему же я научился за эту неделю?
Тут наша сцена и связанные с ней узлы...
Создаем карту
Пока что обучаюсь на примере платформера, а это значит нам нужно создать какое либо поле, где может бегать наш персонаж. На данный момент я изучил два способа, первый - TileMap про который лучше рассказать в отдельном посте, а вот второй более гоблинский.
Все мы иногда статичное тело...
Правой кнопкой мыши жмякаем на нашу 2D сцену "World" и выбираем "Добавить дочерний узел". В списке ищем "StaticBody2d" и теперь у нас есть база. Добавляем два дочерних узла уже в статичный объект - "Polygon2D" и "CollisionPolygon2D".
Для тех кто не понимает на басурманском - объясню, что есть что. Первый - это визуальная геометрическая фигура, а второй - область столкновения (collision - столкновение). Все это нужно для того, чтобы мы могли увидеть наш объект, а игрок не проваливался внутрь него при столкновении.
Рисуем будущую карту при помощи CollisionPolygon2D...
При помощи области столкновения мы наметим будущую карту. Для того чтобы ее было проще рисовать - сделаем привязку к сетке, а далее добавляем по клеткам метки. Должно получится нечто схожее со скриншотом выше.
Код приравнивающий форму фигуры к форме области столкновения...
Теперь нам нужно сделать так, чтобы визуальная фигура повторяла форму области столкновения. Нажимаем на нашу сцену и добавляем к ней скрипт. GD-script во многом схож с языком Python и более-менее прост в понимании. Сначала добавим наши узлы в виде переменных, для этого зажимаем "ctrl" и перетаскиваем в код после блока extends.
Прописываем функцию ready, она будет воспроизводится сразу во время запуска сцены. А дальше просто приравниваем форму фигуры к форме области столкновения (polygon_2d.polygon = collision_polygon_2d.polygon).
Получаем дешевую и сердитую карту - все в гоблинском стиле!
Карта готова, но что делать теперь? Пора добавить нашего персонажа-марионетку.
Создаем новую сцену и для ее основы берем узел CharacterBody2D. Для будущей простоты восприятия я переименовал его в Player. Чтобы увидеть нашу тушку - добавим к ней дочерний узел "Sprite2D", а чтобы можно было еще и потрогать "CollisionShape2D".
Добавляем иконку
Выделяем область столкновения...
Тыкаем спрайт, выбираем текстуру и из быстрой загрузки возьмем иконку Godot. Пока что этого хватит, ведь в этом посте мы не будем затрагивать тему анимации. Далее выделяем область столкновения и сцепляем все это в одну группу кнопкой вверху панели.
Тело готово, пора научить его шевелиться и реагировать на физику. Для этого мы создаем для нашего Player свой скрипт.
Наши переменные...
Задаем переменные через const (constants - постоянное значение). Значения констант не могут быть изменены в ходе самой программы, на то они и постоянные. Для чего нужны эти значения расскажу ниже.
const SPEED = 150.0
const JUMP_VELOCITY = -300.0
const FRICTION = 1000.0
const ACCELERATION = 600.0
На этот раз мы берем не функцию ready, а другую - physics_process. В отличии от простого process, здесь время между выполнением функции будет одинаковым. Это обеспечит нам стабильность при передвижении объектов.
Начнем с настройки гравитации!
Дело в том, что система координат X-Y в Godot имеет свои приколы. Ось X идет от отрицательной к положительной слева направо, однако ось Y идет от отрицательной к положительной сверху вниз. То есть ось Y буквально перевернута с ног на голову. Если непонятно - объясню проще:
Хотим передвинуть вправо - прибавляем к оси X;
Хотим передвинуть влево - вычитаем из оси X;
Хотим передвинуть вниз - прибавляем к оси Y;
Хотим передвинуть вверх - вычитаем из оси Y;
Гравитация... беспощадная ты с*ка!
Как же нам заставить персонажа падать под давлением гравитации? Для начала добавим переменную GRAVITY равную 1000. Затем создаем свою пользовательскую функцию и называем ее aplay_gravity.
Мы должны падать когда находимся в воздухе, то есть не на полу. Буквально говорим программе "Если объект не на полу сделай следующее: измени положение по оси Y в положительную сторону на заданное нами расстояние".
if not is_on_floor():
velocity.y += GRAVITY * delta
Что такое delta? Это время между кадрами, благодаря чему перемещение будет стабильным вне зависимости от FPS.
velocity - это параметр скорости изначально зашитый в наш объект. По этой причине его так же не требуется объявлять как переменную. Грубо говоря сюда мы задаем то расстояние, на которое должен переместиться объект по осям X и Y.
Так как мы каждый раз увеличиваем прошлое значение velocity.y, гравитация будет усиливаться с каждой секундой в воздухе. Благодаря этому у нас не получится прыгать бесконечно вверх и нас прижмет к полу.
Отлично, нас прижало как после "Балтики 9"!
Теперь настраиваем прыжки!
Для этого создаем еще одну пользовательскую функцию handle_jump. Мы говорим ей: "Если мы нажимаем кнопку прыжка и находимся на полу - измени положение по оси Y в отрицательную сторону". Напомню, что константа прыжка имеет отрицательное значение.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y += JUMP_VELOCITY
К гравитации добавляются прыжки...
Прыжок веры...
С прыжками и гравитацией мы освоились, теперь научимся ходить-бродить!
Надеюсь вы еще не забыли, что направление у нас зависит от отрицательного или положительного значения? Есть такая штука в Input как get_axis, где мы задаем две клавиши. Нажатие первой клавиши прировняет переменную к значению -1, нажатие второй клавиши наоборот к 1. Если ни одна из клавиш не нажата, переменная принимает значение 0.
Создаем переменную input_axis внутри physics_process, на этот раз через var, ведь она будет менять свои значения в процессе. А далее задаем машине установку "Если нажата одна из двух клавиш, то мы меняем значение по оси X в зависимости от выбранного направления".
Для этого используем move_toward, где первое значение - наша начальная точка, второе - конечная точка, а третье - промежутки которые будут проходится для их достижения.
Начальная точка - velocity.x
Конечная точка - наша скорость SPEED помноженная на направление (-1 или 1)
Промежутки - наше ускорение ACCELERATION помноженное на время между кадрами delta
if input_axis !=0 :
velocity.x = move_toward(velocity.x, SPEED * input_axis, ACCELERATION * delta)
Вот наш код...
А вот признаки жизни... беги Форест - БЕГИ!
Двигаться мы можем, а вот с остановкой проблема. Что не дает нам вечно кататься по земле? СИЛА ТРЕНИЯ!
Для того чтобы создать силу трения мы делаем похожую функцию. Только теперь конечной точкой у нас выступает 0, а вместо ACCELERATION берем параметр FRICTION. Включается все когда мы не нажимаем кнопки движения, то есть input_axis равен нулю.
if input_axis == 0 :
velocity.x = move_toward(velocity.x, 0, FRICTION * delta)
Бегаю, никого не трогаю... к земле притягиваюсь во время прыжка...
Вишенкой на торте внутри физической функции является move_and_slide которая и отвечает за все эти процессы. Без нее указанные выше шаманские обряды просто не запустятся.
Получился максимально простой гоблинский платформер. Конечно, это пока сложно назвать игрой... но оно работает во славу Горка и Морка! В данном посте я рассказал лишь основы изученного, благо материал заготовлен почти на месяц вперед.
Надеюсь для тех кто в первый раз сталкивается с Godot данный пост будет хоть немного полезен, а более опытные орки и гоблины знатно посмеются с попыток новичка вкатиться в разработку игр.
Если вам интересно и дальше смотреть на то как я собираю лбом грабли, а может и самим чему-то научиться вместе со мной - подписывайтесь на данный блог!
P.S.
Вот так полностью выглядит код управления персонажем, если кому то нужно для ознакомления.
Традиционный тематический гоблин в конце!
Тебе в целом и так правильно подсказали, ну я записал алковидосик ещё бонусом.
Удачи, если что-то не верно, ну формулировка вопроса тогда возможно не понятна.
Мне ещё нравится такой тип человека на подобных форумах :D