Как сделать soul knight на юнити

Обновлено: 04.07.2024

I am trying to imitate the control system in Soul Knight. If you are unfamiliar, whenever a player places their finger on the screen, the joystick appears underneath their finger, then if they drag their finger the joystick tracks to it. This way you dont have to be super precise and worry about putting your finger in the perfect place for the joystick.

Controls graphic
End Goal: In the attached graphic i show what i would like to happen. Pretend the circles outside of the grey circle are the point where the user is touching with their finger. When the touch point moves as shown, i want the white circle within the gray circle to move as shown, in a circular arc to the left. I want this functionality but also want the circle to be able to move to anywhere within the gray circle if the user is touching there. Movement system: As is, the current system finds the position of the touch and finds the difference between that and the center circle in both the x and y axis, then it divides both of those numbers by 10, then adds both values to the x and y axis. This way, the circle moves directly towards the touch. Constraint system: I am using if statements and the Pythagorean theorem to ask the question "If your hypotenuse WOULD be greater than the radius of the big circle, then dont move." This effectively stops the circle, but once it is stopped it never moves again.

Other algorithms that would work better? Any code-specific ideas? Any content you can point me to that already works like the system i desire?

Context for the code- "base" is the grey circle Trackme is a public var I set to tell the white circle what object to move towards.

Генерация уровней в игре как в Soul Knight

Уровни в игре я решил сделать в виде комнат соединенными мостами. Что-то подобное вы можете увидеть в игре - Soul Knight, только у меня в 3D.
Трудность была в том, что комнаты должны быть разного размера. Сам размер комнат сделать разным задача на одну строчку, а вот соединить их между собой оказалось не просто.
Опыта в подобном у меня опыта мало, поэтому решил сделать так как придумал своей головушкой.
В общем поехали!

Начинается все с одной комнаты, у которой есть 4 возможных позиции спавна, которые занесены в лист, следующей комнаты. Позиции спавна - красные ромбики.

Когда комната спавнится - позиция удаляется с листа и деактивируется в игровой области(не удаляется) и после в лист заноситься такие-же позиции со второй комнаты. На скрине вы видите 6 возможных позиций для спавна комнаты.
Так можно заспавнить бесконечное количество комнат, пока Unity не скажет вам пока. На видосе в начале их около 30.
Как уже писал у каждой комнаты свой размер и поэтому нужно было вычислять размер моста, который будет соединять комнаты между собой.

Вопрос с мостами я решил так - на краях комнаты есть объекты генерации моста , на стороне созданной комнаты активируется тот самый объект.
На нем включается скрипт и он детектит такой же объект в комнате напротив и после создания моста - выключается. Размер моста равен позиция второго объекта - позиция первого объекта, а позиция - это центр между этими точками.
После полной генерации уровня, все оставшийся позиции спавна и объекты генерации мостов деактивируется, чтобы не засорять мапу.

Как настроить дозагрузку
контента для тяжёлой игры

Чёт припоминаю что есть куча готовых алгоритмов для генерации, при этом достаточно мощных, почему бы ими не воспользоваться?

Потому что если все время пользоваться готовым, то ничего нового крутого не изобретешь. Иногда нужно делать велосипед.
Кодзиме объяснять приходится это, ппц) ред.

Зачем изобретать молоток? Странная у вас нить рассуждения.

Потому что вместо молотка придумали такие штуки как пистолет для гвоздей и т.д. теперь не странно?

Когда придумывали пистолет для гвоздей пользовались другой логикой. Для решения задачи создавали более современный способ основанный на уже имеющихся и популярных технологиях. Нужно соединять уже созданное в новое, а не мастырить писку из копейки.

Не нужно спорить ради спора.

Готовое зачастую имеет две проблемы: оно или избыточно, или недостаточно. А иногда и то и другое одновременно.

Либо генератор Вселенной со всеми физическими законами, либо генератор квадрата, третьего не дано.) ред.

Комментарий удален по просьбе пользователя

вот это прям жиза)

Ну у этой задачи на самом деле будет куча вариантов по решению. Автор воспользовался интуитивным решением, оно работает и ему подходит. Почему бы и нет. Со своим решением по крайней мере всегда будет проще работать ред.

Комментарий удален по просьбе пользователя

мне захотелось сделать самому, это как раз то что мне нужно ни больше ни меньше. Ну и плюс дальше будет проще дорабатывать.

Комментарий удален по просьбе пользователя ред.

Решения по генерации сильно связаны с особенностями и требованиями игры. Это же не Speed Tree - сгенерил красивое деревце и воткнул как декор.
Для многих решений разбираться и допиливать придется больше, чем пользы получишь.
Не всегда, конечно, нужно смотреть.

правильно я понимаю, что центры комнат всегда находятся на определенной сетке? (см.скрин) может тогда проще настроить алгоритм именно на генерацию ячеек в такой сетке? в этом случае у тебя будет больше контроля

Правильно понимаешь ) Вот видео, сначало тестил просто на колайдерах. Можно сказать внутри этих ячеек появляется сама комната. Можно сказать тут все комнаты максимального размера ред.

Ага, ясно.
По поводу хранения сетки. Сейчас у тебя комнаты добавляются в какой-то список-дерево скорее всего. Из-за этого будет очень сложно добавить дополнительные проходы между комнатами, которые были созданы на разных этапах построения дерева. Мне кажется, именно поэтому у тебя получаются очень длинные ветки-туннели, которые никак между собой не соединены. По геймплею такое очень сложно играется обычно.
Если же хранить именно таблицу i-j, и просто заполнить её ячейками-комнатами, тогда строить проходы между ними можно разными способами и с бОльшим контролем происходящего.
В целом я люблю велосипеды. Поэтому поддерживаю твоё начинание! Буду следить за развитием алгоритма.

Комментарий удален по просьбе пользователя

чутка попозже, мейби скину

Длинные тупиковые кишки (привет Торгаст) это попытка вывести из себя игрока. Не надо так.

Сделал такое количество комнат прост для примера :) Да и в принципе, можно сделать так чтоб игрок сам создавал мосты из комнаты в комнату, как вариант решения.

побуду токсиком) это самый типичный алгоритм построения тупиковых лабиринтов и алгоритмов таких на ютубе полно. даже с "авторской" идеей про точки спавна.
к сожалению, играть в такое вообще не интересно, я сам так делал на какой-то из джемов.
только я не делал мостов, не знаю зачем игроку видеть как соединяются эти комнаты. разве что это заложено геймплеем ред.

Как-то тоже игрался с генерацией комнат. Развивайте дальше концепт. "Мост" это всего лишь условность, он же является комнатой. Которому можно менять размеры вторым проходом генерации. А ещё "мост" можно использовать для объединения комнат в одну. Удачи

Languages

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Совсем недавно Bolt стал бесплатен. Помимо этого вижу большой интерес, особенно со стороны геймдизайнеров. Bolt может дать возможность людям создавать небольшие прототипы совсем без кода. Поэтому решил начать серию статей про этот инструмент для визуального программирования. В этой речь пойдёт про установку и небольшой пример работы.

Туториалы можно скачать бесплатно с Гитхаба. Каждый туториал будет отдельной папкой в проекте. Конкретно этот туториал будет лежать в директории Assets/Tutorials/01 — Intro.

В настройках наименований лучше выбрать Programmer Naming.

В следующих окнах оставляет всё как есть, Next -> Next -> Generate.

Создаём пустой GameObject. Будем в него складывать все объекты.

Добавим в него куб.

Выбираем объект и в инспекторе добавляем к нему компонент Flow Machine.

После добавления создаём Macro по кнопке New и выбираем, куда сохранить. После этого нажимаем Edit Graph. Откроется новое окно. Я его всегда прибиваем в нижнюю панель, чтобы можно было удобно видеть в режиме игры и его тоже.

По умолчания сразу создаётся два узла: Start сработает один раз вначале, Update каждый кадр. Start нам пока не нужен, оставим только Update.

Для начала сделаем что-нибудь простое – заставим кубик вертеться. Добавим ноду, которая будет вращать куб по оси Y.

Если запустить, то можно будет увидеть, как всё работает. Значение паметров в узлах можно менять в Play Mode, после выхода они сохраняются.

Поменяем поведение — сделаем, чтобы вращение было лишь по нажатию на клавишу. Для этого нужно добавить узел Input.GetKeyDown, а от него узел Branch, от которого пойдёт два ответвления (в зависимости от состояния — нажали или нет кнопку).

И проверим, как оно работает.

Как видно, при нажатии на Space выполнение идёт по ветке true, что меняет поворот у объекта.

Но нам, к примеру, хочется одновременно какие-то действие производит. Скажем, чтобы куб постоянно вертелся по одной оси, но по другой только по нажатию на клавишу. Для этого используем узел Sequence.

Проверим, что всё правильно настроили.

Сделаем кое-что пореальней – попробуем поработать с физикой. Добавим на сцену объект Plane (правой кнопкой на Objects -> 3D Object -> Plane). Подвинем его в Scene View, чтоб он был под кубиком.

Затем выберем объект Cube в иерархии и в инспекторе добавим на него компонент Rigid Body.

Это позволит взаимодействовать с объектами с помощью физики. Теперь немного переделаем граф – вместо поворота добавим объекту импульс.

Насладимся результатом. Теперь наш кубик может по нажатию на Space, помимо этого постоянно вертится вокруг оси.

Давно уже не создавал туториалы. Решил вновь попробовать. Приветствуется фидбек. Поддержать меня можно на Патреоне.

Become a patron of Suvitruf today: Read 13 posts by Suvitruf and get access to…

Несколько опросов по поводу содержания.

Важно ли делать видео вариант по этим туториалам или в текстовом виде всё понятно? Желательно видео, но не обязательно. С текстом и так всё понятно. Нужно ли на Гитхабе по каждой статье создавать README файлы, чтобы можно было читать статью прям в репозитории?

Ещё очень важно понять, про что писать следующие статьи. Раскрывать постепенно компоненты? Или исходить из какой-то конкретной задачи? К примеру, "добавить возможность перепрыгивать препятствия" и т.п.

кстати да, спасибо за отличную статью о полной хрени имхо)

а вот патреон нынче вряд ли зайдёт, если только не будешь там нюдсы постить :)) ред.

Мне всегда казалась лукавой эта история про "программирование без кода".
Блять, ты пишешь ровно тот же самый код, просто у тебя другой "синтаксис".
И если в голове - хлебушек, ноды тебе ничем не помогут.
Ну зачем заниматься разработкой людям, которые думают, что способны в архитектуру, но ленятся выучить синтаксис?

Да, это удобный узкоспециализированный инструмент для, например, внутреннего прототипирования геймдизайнерами. Но неизбежно ж начнут пытаться продукты на этом делать - с ожидаемым результатом ред.

Но неизбежно ж начнут пытаться продукты на этом делать - с ожидаемым результатом

На Bolt вряд ли что-то серьёзное получится сделать, там всё очень не оптимизировано. Но возможно Bolt 2 будет хоть немного приближен к Блюпринтам, тогда уже будет реально полезен.

В анриле я постоянно кучу логики пишу на бп и с нормальным разделением уровня доступа нет никаких проблем. Вся база на коде, всякие конечные работающие с контентом вещи - в бп. Но с другой стороны, в нём само построение архитектуры такое скорее, только кодом всё не сделать.

Плюс цена ошибки ниже. Если ругнётся бп то просто отвалится логика, если код то всё крешнет (если нативизацию не использовать). Те же лвлдизайнеры могут какую-то мелочь собрать не отвлекая никого и оно нормально будет работать или иногда даже артисты \ геймдизайнеры что-то себе собрать.

А ещё всякие анимбп, аитри и прочее на нодах и этого никого не напрягает.

Ну и так может быть банально быстрее какую-то логику накидать и проверить не пересобирая код каждый раз а потом уже перенести "вниз", при том даже сетевую. Но вообще с учётом того что есть все инструменты, интерфейсы, библиотеки и т.п. делать читаемый бп "код" вообще не проблема. Единственное неудобства начинаются когда нужны таблицы, шаблоны и прочие сложности. ред.

Contributors 2

Как сделать soul knight на юнити

SOUL KNIGHT CLONE

A Clone of a popular game named Soul Knight

Written in Unity 5.6.0f3 (CSharp)

About

Soul Knight Game version fail

Resources

Packages 0

Releases 1

Читайте также: