Такое чувство, что меня впервые посадили за руль!
Нажимаю всё подряд, чтобы завести эту машину, но она пока отказывается ехать. Я сейчас про Sequencing и Timeline в Unity.
Я решил, что просто выводить текст в диалогах это скучно, и захотел сделать полноценные катсцены. Чтобы всё «завелось», решил использовать Таймлайн.
Это инструмент, который позволяет тебе работать как режиссеру. Можно в реальном времени выставлять, когда персонаж должен повернуться, когда сменится камера, а когда вылетит реплика.
Если коротко, зачем это нужно: Таймлайн это по сути шкала времени. Ты кидаешь на нее разные дорожки (треки) и управляешь анимациями, звуками или событиями в коде. Без него пришлось бы прописывать каждое движение персонажа в скриптах, что превратилось бы в ад. А тут вроде как визуальный редактор.
Но без знаний туда залезать оказалось очень тяжело. Куча слоев, привязок и условий, которые пока не хотят работать вместе.
Время разобраться еще есть, в запасе целый день. Пойду дальше копать мануалы и туторы. Может, среди подписчиков есть те, кто уже приручил этот механизм? Буду рад любым советам по теме.
Нажимаю всё подряд, чтобы завести эту машину, но она пока отказывается ехать. Я сейчас про Sequencing и Timeline в Unity.
Я решил, что просто выводить текст в диалогах это скучно, и захотел сделать полноценные катсцены. Чтобы всё «завелось», решил использовать Таймлайн.
Это инструмент, который позволяет тебе работать как режиссеру. Можно в реальном времени выставлять, когда персонаж должен повернуться, когда сменится камера, а когда вылетит реплика.
Если коротко, зачем это нужно: Таймлайн это по сути шкала времени. Ты кидаешь на нее разные дорожки (треки) и управляешь анимациями, звуками или событиями в коде. Без него пришлось бы прописывать каждое движение персонажа в скриптах, что превратилось бы в ад. А тут вроде как визуальный редактор.
Но без знаний туда залезать оказалось очень тяжело. Куча слоев, привязок и условий, которые пока не хотят работать вместе.
Время разобраться еще есть, в запасе целый день. Пойду дальше копать мануалы и туторы. Может, среди подписчиков есть те, кто уже приручил этот механизм? Буду рад любым советам по теме.
🔥3
Спустя 10 часов возня с таймлайнами наконец закончилась!
Всё сделано через костыли, но оно работает и задачу решает. А значит, пока можно оставить как есть. В геймдеве часто бывает так, что не столь важна архитектура внутри, сколько то, даст ли система нужную эмоцию игроку в итоге. Вот завтра мы это и проверим.
Всего у меня вышло 4 таймлайна и 4 блока диалогов между катсценами.
Что в итоге удалось выжать из этого инструмента: Таймлайн по сути стал дирижером моего маленького оркестра. Один поток отвечает за перемещение камеры (Cinemachine), другой вовремя подсовывает анимации персонажам, а третий дергает скрипты, чтобы на экране вовремя всплывал нужный текст. Когда эти дорожки синхронизируются, статичная сцена превращается в кино. Да, под капотом там сейчас «спагетти» из связей, но на экране всё выглядит так, как я и задумывал.
Для первой попытки результатом доволен. Насколько хорошо это получилось на самом деле решите вы уже завтра.
Работы еще хватает. Мне осталось добавить озвучку и звуковые эффекты, чтобы картинка окончательно «ожила». Так что сегодня снова допоздна.
Всё сделано через костыли, но оно работает и задачу решает. А значит, пока можно оставить как есть. В геймдеве часто бывает так, что не столь важна архитектура внутри, сколько то, даст ли система нужную эмоцию игроку в итоге. Вот завтра мы это и проверим.
Всего у меня вышло 4 таймлайна и 4 блока диалогов между катсценами.
Что в итоге удалось выжать из этого инструмента: Таймлайн по сути стал дирижером моего маленького оркестра. Один поток отвечает за перемещение камеры (Cinemachine), другой вовремя подсовывает анимации персонажам, а третий дергает скрипты, чтобы на экране вовремя всплывал нужный текст. Когда эти дорожки синхронизируются, статичная сцена превращается в кино. Да, под капотом там сейчас «спагетти» из связей, но на экране всё выглядит так, как я и задумывал.
Для первой попытки результатом доволен. Насколько хорошо это получилось на самом деле решите вы уже завтра.
Работы еще хватает. Мне осталось добавить озвучку и звуковые эффекты, чтобы картинка окончательно «ожила». Так что сегодня снова допоздна.
🔥3
Media is too big
VIEW IN TELEGRAM
Задача с диалогами закрыта!
Как и ожидали, в команде у каждого получился свой подход. Кто-то пошел через Scriptable Objects, создавая гибкие базы данных для текста, а я реализовал всё через диалоговые триггеры. Тема огромная, мы точно не изучили её до конца и еще вернемся к ней в будущем.
Помимо самих текстов я использовал таймлайны, о которых писал раньше. Результат того, что получилось, уже можно посмотреть в закрепе.
На подготовку ассетов ушла куча времени, но для второй работы в Unity результатом я доволен. Конечно, уже хочется делать полноценную игру, а не «киноподелку», но пока мы осознанно фокусируемся на базовых механиках. Важно научиться собирать эти элементы воедино, прежде чем замахиваться на что-то масштабное. Так что до полноценных игр мы пока не дошли.
Дальше нас ждут переходы между сценами. На этот раз не буду так сильно заморачиваться с визуалом и ассетами, да и времени в этот раз больше, целая неделя. Есть где разгуляться.
О том, какими способами можно реализовать переходы, расскажу уже завтра, а сейчас пора наконец-то выдохнуть и отдохнуть.
Как вам моя поделка? Жду ваше мнение в комментариях!
Как и ожидали, в команде у каждого получился свой подход. Кто-то пошел через Scriptable Objects, создавая гибкие базы данных для текста, а я реализовал всё через диалоговые триггеры. Тема огромная, мы точно не изучили её до конца и еще вернемся к ней в будущем.
Помимо самих текстов я использовал таймлайны, о которых писал раньше. Результат того, что получилось, уже можно посмотреть в закрепе.
На подготовку ассетов ушла куча времени, но для второй работы в Unity результатом я доволен. Конечно, уже хочется делать полноценную игру, а не «киноподелку», но пока мы осознанно фокусируемся на базовых механиках. Важно научиться собирать эти элементы воедино, прежде чем замахиваться на что-то масштабное. Так что до полноценных игр мы пока не дошли.
Дальше нас ждут переходы между сценами. На этот раз не буду так сильно заморачиваться с визуалом и ассетами, да и времени в этот раз больше, целая неделя. Есть где разгуляться.
О том, какими способами можно реализовать переходы, расскажу уже завтра, а сейчас пора наконец-то выдохнуть и отдохнуть.
Как вам моя поделка? Жду ваше мнение в комментариях!
😁4🔥2
Media is too big
VIEW IN TELEGRAM
Магия бесшовности или как обмануть игрока при смене сцен 🎬
Иногда геймдизайн напоминает работу иллюзиониста. Моя главная задача сейчас заключается в том, чтобы игрок не заметил момент выгрузки одного мира и подгрузки другого.
Весь секрет кроется в парных анимациях. Я создаю анимацию выхода в конце первой сцены. Она замирает ровно на том же моменте, с которого стартует анимация входа во второй сцене.
Разберем на примере переходов в Balatro, это настоящий эталон стиля. Там экран плавно заполняется цветным прямоугольником и по центру появляется карта. В этот момент происходит скрытая смена сцен. Уже в новой сцене карта эффектно уничтожается через шейдер растворения, а прямоугольник схлопывается в центр до полного исчезновения. Для игрока это выглядит как одно цельное действие, хотя декорации сменились полностью.
Но как передать ту самую карту между сценами?
Если я хочу, чтобы в анимации перехода отобразилась конкретная карта, мне нужно передать её номер из одной системы в другую. Скриптбл обджекты для такого рандома подходят плохо. Проще использовать объект, который не уничтожается при загрузке через метод DontDestroyOnLoad, либо передать нужный номер через статику: DataHolder.CardID = randomID;.
В новой сцене я просто считываю это значение и подставляю нужный спрайт в шейдер или аниматор. В итоге карта успешно переживает переезд.
За неделю попробую реализовать нечто подобное.
Как думаете, какой эффект перехода сейчас самый сочный в инди играх?
Иногда геймдизайн напоминает работу иллюзиониста. Моя главная задача сейчас заключается в том, чтобы игрок не заметил момент выгрузки одного мира и подгрузки другого.
Весь секрет кроется в парных анимациях. Я создаю анимацию выхода в конце первой сцены. Она замирает ровно на том же моменте, с которого стартует анимация входа во второй сцене.
Разберем на примере переходов в Balatro, это настоящий эталон стиля. Там экран плавно заполняется цветным прямоугольником и по центру появляется карта. В этот момент происходит скрытая смена сцен. Уже в новой сцене карта эффектно уничтожается через шейдер растворения, а прямоугольник схлопывается в центр до полного исчезновения. Для игрока это выглядит как одно цельное действие, хотя декорации сменились полностью.
Но как передать ту самую карту между сценами?
Если я хочу, чтобы в анимации перехода отобразилась конкретная карта, мне нужно передать её номер из одной системы в другую. Скриптбл обджекты для такого рандома подходят плохо. Проще использовать объект, который не уничтожается при загрузке через метод DontDestroyOnLoad, либо передать нужный номер через статику: DataHolder.CardID = randomID;.
В новой сцене я просто считываю это значение и подставляю нужный спрайт в шейдер или аниматор. В итоге карта успешно переживает переезд.
За неделю попробую реализовать нечто подобное.
Как думаете, какой эффект перехода сейчас самый сочный в инди играх?
🔥3
Сегодня иду играть в бильярд, поэтому давайте разберем его через призму геймдизайна 🎱
На первый взгляд это просто шары и кий, но с точки зрения геймдизайна это идеальная игровая система. Сильвестр в своей книге много пишет про эмерджентность. Это когда очень простые правила создают бесконечное количество сложных и уникальных ситуаций.
В основе бильярда лежат понятные законы физики. У вас есть геометрия, трение и сила удара. Но из-за того, что система аналоговая, игрок никогда не сможет повторить один и тот же удар абсолютно идентично. Каждое столкновение шаров генерирует новое событие, которое заставляет вас заново анализировать стол.
Это и есть те самые триггеры эмоций в чистом виде. Вы чувствуете азарт, когда шар идет по сложной траектории через весь стол, и ощущаете почти физическую боль, когда он замирает в миллиметре от лузы.
Самое крутое здесь то, что обратная связь моментальная. Система не объясняет вам правила текстом, вы чувствуете их через вес шара и звук удара. Бильярд наглядно показывает, что для создания глубокого геймплея не обязательно придумывать сотни страниц мануалов. Достаточно дать игроку надежную систему, в которой он сможет бесконечно оттачивать свое мастерство.
Вечер планирую провести за изучением этих физических систем на практике. Хороший повод отвлечься от монитора и посмотреть на геймдизайн в реальном мире.
На первый взгляд это просто шары и кий, но с точки зрения геймдизайна это идеальная игровая система. Сильвестр в своей книге много пишет про эмерджентность. Это когда очень простые правила создают бесконечное количество сложных и уникальных ситуаций.
В основе бильярда лежат понятные законы физики. У вас есть геометрия, трение и сила удара. Но из-за того, что система аналоговая, игрок никогда не сможет повторить один и тот же удар абсолютно идентично. Каждое столкновение шаров генерирует новое событие, которое заставляет вас заново анализировать стол.
Это и есть те самые триггеры эмоций в чистом виде. Вы чувствуете азарт, когда шар идет по сложной траектории через весь стол, и ощущаете почти физическую боль, когда он замирает в миллиметре от лузы.
Самое крутое здесь то, что обратная связь моментальная. Система не объясняет вам правила текстом, вы чувствуете их через вес шара и звук удара. Бильярд наглядно показывает, что для создания глубокого геймплея не обязательно придумывать сотни страниц мануалов. Достаточно дать игроку надежную систему, в которой он сможет бесконечно оттачивать свое мастерство.
Вечер планирую провести за изучением этих физических систем на практике. Хороший повод отвлечься от монитора и посмотреть на геймдизайн в реальном мире.
🔥4
Тот случай, когда шары в лузах оказались не самым главным 🎱
Вчерашний поход в бильярд с другом, которого я не видел целую вечность, заставил меня по-другому взглянуть на одну главу из книги Тайнана Сильвестра. Он подробно описывает концепцию игры в мяч. Суть её в том, что сама механика бросания мяча друг другу предельно проста и даже скучна. Но при этом она создает идеальный контекст для социального общения.
Вчера я прочувствовал это на практике. Главной моей эмоцией был вовсе не триумф от забитого шара. Самым важным оказалось именно общение с человеком. Игра здесь выступала лишь вторичным фоном. Она удачно заполняла паузы, создавала легкий азарт и помогала нашему диалогу течь естественно. Это и есть та самая игра в мяч, где механика служит лишь поводом для укрепления человеческой связи.
Если вам нужно с кем-то встретиться, попробуйте вместо типичных посиделок в баре найти свою игру в мяч. Это может быть бильярд, настольный теннис или даже совместная сборка конструктора. В такой обстановке общение часто раскрывается совсем иначе.
P.S. Изначально я думал, что этот канал будет в основном про код и технические фишки Unity. Но с каждым днем ко мне приходит понимание, что геймдизайн на самом деле про другое. Это про психологию, про человеческие эмоции и про то, как люди взаимодействуют друг с другом внутри созданных нами систем.
Мне интересно узнать ваше мнение. Про что вам сейчас интереснее читать в этом блоге? Вас больше привлекает внутрянка кода и техническая разработка или такие разборы смыслов и психологии игр?
Вчерашний поход в бильярд с другом, которого я не видел целую вечность, заставил меня по-другому взглянуть на одну главу из книги Тайнана Сильвестра. Он подробно описывает концепцию игры в мяч. Суть её в том, что сама механика бросания мяча друг другу предельно проста и даже скучна. Но при этом она создает идеальный контекст для социального общения.
Вчера я прочувствовал это на практике. Главной моей эмоцией был вовсе не триумф от забитого шара. Самым важным оказалось именно общение с человеком. Игра здесь выступала лишь вторичным фоном. Она удачно заполняла паузы, создавала легкий азарт и помогала нашему диалогу течь естественно. Это и есть та самая игра в мяч, где механика служит лишь поводом для укрепления человеческой связи.
Если вам нужно с кем-то встретиться, попробуйте вместо типичных посиделок в баре найти свою игру в мяч. Это может быть бильярд, настольный теннис или даже совместная сборка конструктора. В такой обстановке общение часто раскрывается совсем иначе.
P.S. Изначально я думал, что этот канал будет в основном про код и технические фишки Unity. Но с каждым днем ко мне приходит понимание, что геймдизайн на самом деле про другое. Это про психологию, про человеческие эмоции и про то, как люди взаимодействуют друг с другом внутри созданных нами систем.
Мне интересно узнать ваше мнение. Про что вам сейчас интереснее читать в этом блоге? Вас больше привлекает внутрянка кода и техническая разработка или такие разборы смыслов и психологии игр?
❤3
Почему в одних играх мир кажется декорацией, а в других живой экосистемой? 🌍
Когда мы проектируем игру, у нас есть два пути. Мы можем вручную прописать каждое событие и каждый скрипт, превращая игрока в зрителя на рельсах. А можем создать набор независимых систем, которые будут взаимодействовать между собой без нашего прямого участия. Именно второй подход позволяет создавать проекты, которые удивляют даже своих создателей.
Такое явление в геймдеве называют эмерджентностью. Суть его заключается в том, что взаимодействие простых правил порождает новое, гораздо более сложное поведение всей системы.
Пример из реального мира часто приводит Роберт Сапольски в своих лекциях. Возьмем колонию муравьев. Отдельное насекомое обладает примитивным набором реакций и не понимает, как строить мегаполис. Однако когда тысячи муравьев начинают обмениваться химическими сигналами по простым правилам, возникает эмерджентность. Колония превращается в сверхразум, который возводит сложнейшие архитектурные сооружения и эффективно управляет ресурсами. Интеллект здесь не заложен в каждом участнике, он рождается из их связи.
В геймдизайне это работает точно так же. Тайнан Сильвестр в своей книге объясняет, что нам не нужно программировать каждую случайную встречу. Достаточно прописать базовые свойства объектов. Например, если мы создадим правило, что хищники хотят есть, а трава растет быстрее после дождя, то в игре сама собой возникнет симуляция миграции животных. Разработчик просто наблюдает со стороны за тем, как его «муравьи» создают уникальные истории.
Именно этот подход делает игры глубокими. Вместо того чтобы имитировать жизнь через бесконечные диалоги, мы создаем условия для возникновения этой жизни. Для игрока такая система ощущается магией и полной свободой воли, хотя на деле это лишь результат столкновения нескольких понятных правил. Мы не пишем сценарий, мы строим среду, в которой сценарий пишется сам.
Вспомните свой опыт. Случались ли у вас в играх ситуации, которые выглядели как продуманный сюжет, но явно были результатом случайного столкновения игровых механик?
Когда мы проектируем игру, у нас есть два пути. Мы можем вручную прописать каждое событие и каждый скрипт, превращая игрока в зрителя на рельсах. А можем создать набор независимых систем, которые будут взаимодействовать между собой без нашего прямого участия. Именно второй подход позволяет создавать проекты, которые удивляют даже своих создателей.
Такое явление в геймдеве называют эмерджентностью. Суть его заключается в том, что взаимодействие простых правил порождает новое, гораздо более сложное поведение всей системы.
Пример из реального мира часто приводит Роберт Сапольски в своих лекциях. Возьмем колонию муравьев. Отдельное насекомое обладает примитивным набором реакций и не понимает, как строить мегаполис. Однако когда тысячи муравьев начинают обмениваться химическими сигналами по простым правилам, возникает эмерджентность. Колония превращается в сверхразум, который возводит сложнейшие архитектурные сооружения и эффективно управляет ресурсами. Интеллект здесь не заложен в каждом участнике, он рождается из их связи.
В геймдизайне это работает точно так же. Тайнан Сильвестр в своей книге объясняет, что нам не нужно программировать каждую случайную встречу. Достаточно прописать базовые свойства объектов. Например, если мы создадим правило, что хищники хотят есть, а трава растет быстрее после дождя, то в игре сама собой возникнет симуляция миграции животных. Разработчик просто наблюдает со стороны за тем, как его «муравьи» создают уникальные истории.
Именно этот подход делает игры глубокими. Вместо того чтобы имитировать жизнь через бесконечные диалоги, мы создаем условия для возникновения этой жизни. Для игрока такая система ощущается магией и полной свободой воли, хотя на деле это лишь результат столкновения нескольких понятных правил. Мы не пишем сценарий, мы строим среду, в которой сценарий пишется сам.
Вспомните свой опыт. Случались ли у вас в играх ситуации, которые выглядели как продуманный сюжет, но явно были результатом случайного столкновения игровых механик?
👍2
Искусственный интеллект в геймдеве или где проходит граница творчества? 🎨
Недавно в индустрии прогремел очередной громкий скандал. На этот раз под прицел попали крупные студии вроде Square Enix за использование нейросетей в создании арта. Фанаты по всему миру обрушились с критикой на разработчиков. Игроки считают, что корпорации просто экономят на живых авторах и выдают бездушный продукт. Тема сейчас максимально раскалена, поэтому мне стало интересно ваше мнение на этот счет.
🤔 Мое отношение к этому вопросу довольно однозначное. Игнорировать ИИ сегодня это точно большая ошибка. Это прежде всего невероятно мощный инструмент для работы. Нейросети могут многому научить, они помогают быстро найти нужную информацию или поправить сложный кусок кода. Это идеальный ассистент, который берет на себя скучную рутину и позволяет нам больше времени уделять самому геймдизайну.
🚫 Однако здесь критически важно не впадать в крайности. Отдавать ИИ абсолютно всю работу за себя это путь к деградации автора. Однажды я услышал золотые слова. Если вы хотите в чем то действительно преуспеть, то вам нужно заниматься этим непосредственно своими руками. В этом и заключается суть мастерства.
Если за вас всё будет делать алгоритм, то в результате в игре не останется ничего вашего. Вы не пройдете через свои ошибки и не получите реального опыта. В итоге проект потеряет ту самую искру, которую всегда чувствует игрок. Машина может собрать картинку или текст, но она не понимает их смысла и не может вложить в них свои переживания.
Я использую нейросети как умный справочник или как способ быстро проверить гипотезу. Но финальный штрих и вся архитектура игры всегда остаются за мной. Ведь игры это способ передать эмоцию от человека к человеку, а машина на такое просто не способна.
👇 А как вы относитесь к ИИ в играх? Это крутой прогресс или всё же убийство настоящего искусства? Пишите в комментариях!
Недавно в индустрии прогремел очередной громкий скандал. На этот раз под прицел попали крупные студии вроде Square Enix за использование нейросетей в создании арта. Фанаты по всему миру обрушились с критикой на разработчиков. Игроки считают, что корпорации просто экономят на живых авторах и выдают бездушный продукт. Тема сейчас максимально раскалена, поэтому мне стало интересно ваше мнение на этот счет.
🤔 Мое отношение к этому вопросу довольно однозначное. Игнорировать ИИ сегодня это точно большая ошибка. Это прежде всего невероятно мощный инструмент для работы. Нейросети могут многому научить, они помогают быстро найти нужную информацию или поправить сложный кусок кода. Это идеальный ассистент, который берет на себя скучную рутину и позволяет нам больше времени уделять самому геймдизайну.
🚫 Однако здесь критически важно не впадать в крайности. Отдавать ИИ абсолютно всю работу за себя это путь к деградации автора. Однажды я услышал золотые слова. Если вы хотите в чем то действительно преуспеть, то вам нужно заниматься этим непосредственно своими руками. В этом и заключается суть мастерства.
Если за вас всё будет делать алгоритм, то в результате в игре не останется ничего вашего. Вы не пройдете через свои ошибки и не получите реального опыта. В итоге проект потеряет ту самую искру, которую всегда чувствует игрок. Машина может собрать картинку или текст, но она не понимает их смысла и не может вложить в них свои переживания.
Я использую нейросети как умный справочник или как способ быстро проверить гипотезу. Но финальный штрих и вся архитектура игры всегда остаются за мной. Ведь игры это способ передать эмоцию от человека к человеку, а машина на такое просто не способна.
👇 А как вы относитесь к ИИ в играх? Это крутой прогресс или всё же убийство настоящего искусства? Пишите в комментариях!
👍2
Векторы в пространстве: как работает математика направлений 📐
🛌 На этих выходных я почти не открывал Unity и просто восстанавливал силы. Переход между сценами уже доделал и завтра покажу результат в небольшом видео. А пока есть время, давайте разберем базу по векторам, потому что без этого в геймдеве буквально никуда.
📍 Сложение векторов и правило треугольника.
Представьте, что у вас есть вектор AB и вектор BC. Если сложить их между собой, то в итоге мы получим вектор AC. Это работает очень логично. Мы как будто проходим путь из точки A в точку B, а потом сразу в точку C. В игре это используется постоянно, например, когда мы прибавляем к текущей позиции игрока вектор его скорости, чтобы вычислить, где он окажется в следующем кадре.
📏 Как найти расстояние до объекта.
Чтобы вычислить вектор между двумя точками, нам нужно из позиции цели вычесть позицию нашего объекта. Полученная разность это и есть вектор, который указывает точно на цель. Если нам нужно узнать само расстояние в метрах, мы просто берем длину этого вектора. В коде это делается через свойство magnitude.
📎 Нормализация или зачем нам единичный вектор.
Часто нам нужно знать только направление, а не само расстояние. Для этого используется нормализация вектора. Это процесс, который делает длину вектора равной единице, но при этом полностью сохраняет его направление. Если вы хотите, чтобы персонаж двигался с одинаковой скоростью в любую сторону, вам нужно всегда нормализовать вектор ввода от игрока. Без этого при движении по диагонали герой будет бежать быстрее, чем по прямой.
🧮 Скалярное умножение и проверка видимости.
Есть еще такая крутая штука как Dot Product. Она позволяет понять, насколько два вектора смотрят в одну сторону. Если результат положительный, значит объекты направлены примерно в одну сторону. Если отрицательный, то они смотрят друг от друга. На этом строятся почти все системы зрения врагов или расчет освещенности поверхностей в шейдерах.
🛌 На этих выходных я почти не открывал Unity и просто восстанавливал силы. Переход между сценами уже доделал и завтра покажу результат в небольшом видео. А пока есть время, давайте разберем базу по векторам, потому что без этого в геймдеве буквально никуда.
📍 Сложение векторов и правило треугольника.
Представьте, что у вас есть вектор AB и вектор BC. Если сложить их между собой, то в итоге мы получим вектор AC. Это работает очень логично. Мы как будто проходим путь из точки A в точку B, а потом сразу в точку C. В игре это используется постоянно, например, когда мы прибавляем к текущей позиции игрока вектор его скорости, чтобы вычислить, где он окажется в следующем кадре.
📏 Как найти расстояние до объекта.
Чтобы вычислить вектор между двумя точками, нам нужно из позиции цели вычесть позицию нашего объекта. Полученная разность это и есть вектор, который указывает точно на цель. Если нам нужно узнать само расстояние в метрах, мы просто берем длину этого вектора. В коде это делается через свойство magnitude.
📎 Нормализация или зачем нам единичный вектор.
Часто нам нужно знать только направление, а не само расстояние. Для этого используется нормализация вектора. Это процесс, который делает длину вектора равной единице, но при этом полностью сохраняет его направление. Если вы хотите, чтобы персонаж двигался с одинаковой скоростью в любую сторону, вам нужно всегда нормализовать вектор ввода от игрока. Без этого при движении по диагонали герой будет бежать быстрее, чем по прямой.
🧮 Скалярное умножение и проверка видимости.
Есть еще такая крутая штука как Dot Product. Она позволяет понять, насколько два вектора смотрят в одну сторону. Если результат положительный, значит объекты направлены примерно в одну сторону. Если отрицательный, то они смотрят друг от друга. На этом строятся почти все системы зрения врагов или расчет освещенности поверхностей в шейдерах.
🔥2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
👀 Ребят, я немного задержался с обещанным видео по переходам. Всё дело в том, что в последний момент я решил добавить шейдер исчезновения и буквально пропал в коде. Я не мог оставить дело на полпути, пока не добился нужного результата. В итоге у меня получилось почти идеально повторить эффект из Balatro. Если заглянете в мой самый первый пост про переходы, то сможете сравнить мой результат с оригиналом.
🛠 С технической стороны всё работает по схеме, которую я описывал ранее. У нас есть две сцены и скрипт DoTween, который отвечает за начальную анимацию. После этого состояние фиксируется в статику, а следующая сцена запускается с проигрывания обратной анимации. Но именно на стыке этих процессов я решил, что обычного исчезновения мне мало, и полез изучать шейдеры.
🧬 Рано или поздно я бы всё равно пришел к теме шейдеров, но эффект Dissolve (растворение) оказался идеальным поводом для старта. Если говорить просто, то это способ заставить объект исчезать не целиком, а через специальную маску шума. Шейдер попиксельно проверяет значения этой маски и решает, какую часть картинки нужно отрисовать, а какую сделать прозрачной или подсветить по краям.
📺 Видео с результатом уже в посте. Теперь переходы выглядят законченно, и я наконец могу двигаться дальше. В следующий раз мы более подробно коснемся темы шейдеров и Shader Graph в Unity. Я расскажу, как визуальное программирование помогает создавать магию без написания сотен строк сложного кода.
Ну что, похоже?
🛠 С технической стороны всё работает по схеме, которую я описывал ранее. У нас есть две сцены и скрипт DoTween, который отвечает за начальную анимацию. После этого состояние фиксируется в статику, а следующая сцена запускается с проигрывания обратной анимации. Но именно на стыке этих процессов я решил, что обычного исчезновения мне мало, и полез изучать шейдеры.
🧬 Рано или поздно я бы всё равно пришел к теме шейдеров, но эффект Dissolve (растворение) оказался идеальным поводом для старта. Если говорить просто, то это способ заставить объект исчезать не целиком, а через специальную маску шума. Шейдер попиксельно проверяет значения этой маски и решает, какую часть картинки нужно отрисовать, а какую сделать прозрачной или подсветить по краям.
📺 Видео с результатом уже в посте. Теперь переходы выглядят законченно, и я наконец могу двигаться дальше. В следующий раз мы более подробно коснемся темы шейдеров и Shader Graph в Unity. Я расскажу, как визуальное программирование помогает создавать магию без написания сотен строк сложного кода.
Ну что, похоже?
🔥8
За туманом войны: как рождается концепция нашей игры 🗺
🕯 Мы давно не рассказывали новостей о самом проекте, хотя работа за кулисами буквально кипит. Сейчас мы находимся на самом важном и одновременно сложном этапе. Мы всей командой погрузились в режим бесконечных дебатов и штурмов. Это время, когда в спорах рождаются фичи и закладывается фундамент будущего геймплея.
🏰 В наших обсуждениях мы всё чаще начинаем уходить в сторону идей из Heroes of Might and Magic III. Мы воображаем невероятные механики и масштабные системы, рисуем в голове идеальный мир. Однако в такой момент очень важно вовремя сказать себе «стоп». Нельзя построить замок, не заложив крепкое основание, поэтому сейчас мы занимаемся расстановкой точек развилок. Мы определяем места, где позже сможем добавить разные варианты механик, чтобы в будущем выбрать лучший игровой опыт через тесты.
📦 Наша ближайшая цель это создание MVP или минимально жизнеспособного продукта. Суть этого подхода заключается в том, чтобы собрать самую простую версию игры, которую уже можно запустить и потрогать. В MVP мы планируем реализовать основной игровой процесс выбора бойцов и систему уникальных бафов от командиров. Возможно, туда же войдет и базовая механика боя. Главная задача здесь — проверить, работает ли сама идея, прежде чем тратить месяцы на полировку деталей.
🌫 Многие другие части системы пока скрыты от нас за туманом войны. Мы еще не знаем точно, каким станет магазин или система экономики. Остается открытым вопрос о наличии полноценной сюжетной кампании. Мы сознательно оставляем эти зоны пустыми, чтобы сфокусироваться на главном и не утонуть в бесконечном планировании того, что может измениться.
🤝 Рано или поздно мы снова встретимся с этими вопросами лицом к лицу. Когда база будет готова, мы обязательно позовем вас участвовать в обсуждении и выборе лучших решений. Ведь именно взгляд со стороны помогает увидеть те нюансы, которые мы могли упустить в пылу командных споров.
👇 А как вы считаете, что в тактических стратегиях важнее всего на самом старте?
🕯 Мы давно не рассказывали новостей о самом проекте, хотя работа за кулисами буквально кипит. Сейчас мы находимся на самом важном и одновременно сложном этапе. Мы всей командой погрузились в режим бесконечных дебатов и штурмов. Это время, когда в спорах рождаются фичи и закладывается фундамент будущего геймплея.
🏰 В наших обсуждениях мы всё чаще начинаем уходить в сторону идей из Heroes of Might and Magic III. Мы воображаем невероятные механики и масштабные системы, рисуем в голове идеальный мир. Однако в такой момент очень важно вовремя сказать себе «стоп». Нельзя построить замок, не заложив крепкое основание, поэтому сейчас мы занимаемся расстановкой точек развилок. Мы определяем места, где позже сможем добавить разные варианты механик, чтобы в будущем выбрать лучший игровой опыт через тесты.
📦 Наша ближайшая цель это создание MVP или минимально жизнеспособного продукта. Суть этого подхода заключается в том, чтобы собрать самую простую версию игры, которую уже можно запустить и потрогать. В MVP мы планируем реализовать основной игровой процесс выбора бойцов и систему уникальных бафов от командиров. Возможно, туда же войдет и базовая механика боя. Главная задача здесь — проверить, работает ли сама идея, прежде чем тратить месяцы на полировку деталей.
🌫 Многие другие части системы пока скрыты от нас за туманом войны. Мы еще не знаем точно, каким станет магазин или система экономики. Остается открытым вопрос о наличии полноценной сюжетной кампании. Мы сознательно оставляем эти зоны пустыми, чтобы сфокусироваться на главном и не утонуть в бесконечном планировании того, что может измениться.
🤝 Рано или поздно мы снова встретимся с этими вопросами лицом к лицу. Когда база будет готова, мы обязательно позовем вас участвовать в обсуждении и выборе лучших решений. Ведь именно взгляд со стороны помогает увидеть те нюансы, которые мы могли упустить в пылу командных споров.
👇 А как вы считаете, что в тактических стратегиях важнее всего на самом старте?
👍3
Почему нельзя просто так взять и сделать автобой ⚔️
🏗 Казалось бы, задача звучит максимально просто, но на деле мы столкнулись с серьезным архитектурным вызовом. Если мы захотим позже добавить в игру мультиплеер, то закладывать сложную структуру нужно уже сейчас. Обычные уроки из интернета здесь не особо помогают, ведь нельзя просто раскидать всю логику по скриптам на объектах и надеяться на стабильную работу сети.
🖥 Сейчас мы находимся в активном поиске правильного решения и каждый день открываем для себя новые нюансы. Мы пришли к выводу, что всю симуляцию боя желательно выносить за пределы Unity. Сам движок в такой схеме выступает лишь в роли презентера, который просто отрисовывает результаты вычислений. Вся математика должна жить отдельно в чистом коде, иначе добиться синхронности между игроками будет практически невозможно.
⏳ Еще одна важная деталь заключается в системе тиков. Мы хотим перевести симуляцию на абстрактные шаги времени, которые потом будут привязываться к таймингам Unity. Это позволит ускорять или замедлять бои без потери точности расчетов. Если это будет мультиплеер в духе автошахмат, то сервер должен присылать готовый лог боя, а наша игра будет работать как обычный проигрыватель этих данных.
🧩 По сложности такая архитектура порой обходит даже очень серьезные системы. Мы постоянно дебатируем внутри команды и пока не пришли к итоговому решению, которое бы нас полностью устроило. В геймдеве слишком много подводных камней на стыке визуальной части и сухой логики, поэтому мы сейчас буквально продираемся сквозь туман в поисках идеального паттерна.
🤝 Возможно, среди вас есть те, кто уже решал подобные задачи или проектировал системы для автобоев. Буду рад любым советам или опыту по этой теме. Как вы разделяете симуляцию и визуализацию, и какие инструменты используете для синхронизации состояния между сервером и клиентом?
🏗 Казалось бы, задача звучит максимально просто, но на деле мы столкнулись с серьезным архитектурным вызовом. Если мы захотим позже добавить в игру мультиплеер, то закладывать сложную структуру нужно уже сейчас. Обычные уроки из интернета здесь не особо помогают, ведь нельзя просто раскидать всю логику по скриптам на объектах и надеяться на стабильную работу сети.
🖥 Сейчас мы находимся в активном поиске правильного решения и каждый день открываем для себя новые нюансы. Мы пришли к выводу, что всю симуляцию боя желательно выносить за пределы Unity. Сам движок в такой схеме выступает лишь в роли презентера, который просто отрисовывает результаты вычислений. Вся математика должна жить отдельно в чистом коде, иначе добиться синхронности между игроками будет практически невозможно.
⏳ Еще одна важная деталь заключается в системе тиков. Мы хотим перевести симуляцию на абстрактные шаги времени, которые потом будут привязываться к таймингам Unity. Это позволит ускорять или замедлять бои без потери точности расчетов. Если это будет мультиплеер в духе автошахмат, то сервер должен присылать готовый лог боя, а наша игра будет работать как обычный проигрыватель этих данных.
🧩 По сложности такая архитектура порой обходит даже очень серьезные системы. Мы постоянно дебатируем внутри команды и пока не пришли к итоговому решению, которое бы нас полностью устроило. В геймдеве слишком много подводных камней на стыке визуальной части и сухой логики, поэтому мы сейчас буквально продираемся сквозь туман в поисках идеального паттерна.
🤝 Возможно, среди вас есть те, кто уже решал подобные задачи или проектировал системы для автобоев. Буду рад любым советам или опыту по этой теме. Как вы разделяете симуляцию и визуализацию, и какие инструменты используете для синхронизации состояния между сервером и клиентом?
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
📐 Речь про Георгия Вороного. Еще в начале прошлого века он описал принцип разбиения плоскости, который мы теперь называем Диаграммой Вороного. В связке с методами геометрического моделирования Филипа Шнейдера эта математика позволяет превращать случайные точки в логичные природные структуры.
🦒 Природа использует эти формулы повсюду. Посмотрите на расцветку жирафа — это же чистая диаграмма Вороного в действии. Тот же узор мы видим в структуре крыльев стрекозы, на корке ананаса или в том, как бликует вода в бассейне. Везде, где области растут из разных центров и сталкиваются друг с другом, образуется этот характерный многоугольный узор.
В геймдеве это применяется повсеместно:
🔹 Генерация биомов: Каждая ячейка становится зоной леса, пустыни или болота, создавая естественные границы без прямых линий.
🔹Разрушаемость: Когда в игре эффектно разлетается стекло или трескается камень, за форму осколков часто отвечает именно этот алгоритм.
🔹Поиск пути: Системы навигации используют эти ячейки, чтобы ИИ понимал, где находится безопасная зона.
🔲 Использование этих паттернов позволяет нам уйти от скучных квадратных сеток к органическим формам. В своей разработке я тоже планирую опираться на эти наработки для создания уникальных игровых полей и распределения ресурсов. Математика позволяет сделать так, чтобы мир не выглядел «нарисованным по линейке», а казался живым и естественным.
🪆 Приятно осознавать, что в базе мировых хитов лежат труды нашего соотечественника. Геймдев это не только картинки, но и мощная научная школа. Каждый раз, когда вы видите реалистичную структуру почвы или процедурный узор на броне, помните, что за этим стоит серьезная фундаментальная наука.
А вы замечали подобные узоры в других местах?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3
Месяц в эфире! 🚀
🗓 Сегодня исполнился ровно месяц с того момента, как я начал ежедневно делиться с вами процессом разработки и своими мыслями. За это время я не пропустил ни одного дня, и мне очень приятно видеть, что этот контент находит отклик. Нас в канале уже почти 40 человек и для меня это прекрасный старт. Я искренне благодарен каждому за поддержку и интерес.
⚙️ Теперь к главным новостям. Подготовительный этап окончен, и я официально объявляю о начале разработки MVP нашей игры. Весь теоретический фундамент, о котором я писал раньше, теперь начинает воплощаться в коде и визуале.
🕹 Ставлю себе цель показать первые результаты геймплея уже через месяц. Это будет непростой период, но крайне важный для проекта. Будем расти и двигаться дальше. Чем больше нас здесь будет, тем круче мотивация делать игру качественнее.
🫰 Спасибо, что вы со мной. Как вам вообще такой темп постов, продолжаем в том же духе?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6