Добрый!
Итак, есть задумка, но возникли траблы с воплощением, глубокое яндексование не особо помогло.
Суть - как можно реализовать в Юнити2д круглый игровой мир (планета, по\под поверхностью можно передвигаться).
Пример - Reus., но на сколько понимаю, там процедурная генерация из окргулых террайнов - а мне нужна полностью "ручная" проработка мира. Сама игра ближе к платформеру по жанру.
Если просто банально создать круг и вертеть геймкамеру вокруг его центра - то, на сколько понимаю, будет не особо весело расставлять игровые объекты по кругу, и если планета достаточно большая - то нет уверенности в том, что не будет слишком большой нагрузки на проц.
Кроме того, вероятно, можно крутить саму планету по ходу движения игрока - тогда можно пользоваться нативной "гравитацией" юнити для персонажа, а не переписывать гравитацию к центру планеты.
Так же, так как подразумевается, что нужна возможность использовать классические для платформеров "парящие" блоки - то возникает вопрос с тем, что в круглом мире блоки должны быть секторами круга, что совсем уж жесть. Появилась мысль воплотить иллюзию круглой планеты с помощью искажений камеры - но что-то этот подход вызывает сомнения)
Спасибо за ответ, в целом, это "то самое" - но только в плане физики.
Для меня же основной вопрос, таки - как можно загеймдизайнить такой уровень прощу - с учётом тысяч спрайтов. Пришел к выводу, что простого решения этой задачи нет, к сожалению. Разве что писать собственный обработчик, который может "закрутить" плоский уровень вокруг планеты.
В общем, долой извращения, не дорос ещё - буду писать плоский игровой мир.
Разве что...возник тут ещё один вопрос, видимо, опять же - моей квалификации недостаточно, чтобы самостоятельно разобраться - если не сложно, может быть, поможете? Есть игрок, по клику ему нужно плавно сбежать по волнистой кривой линии в другой угол экрана. Без физики, на сколько понимаю, это можно сделать, прибегая к сложным извращениям с кривыми Безье и в каждой точке пересчитывая вектор движения - или в Юнити есть какой-то механизм движения по заранее заданной траектории?
Благодарю за интерес к вопросу. Да, это самый простой подход, и если совсем ничерта не выйдет -остановлюсь на нём (однако тут интересно, как сделать его визуально бесшовным) - но хочется именно полноценную реализацию игровых уровней в виде планет. Пока что, как я писал, есть два способа, но они оба имеют достаточно неприятную реализацию - в целом, я готов заморочиться и с блоками в виде части сектора - но хочется точно понимать, что нет путей проще или возможности как-то упростить процесс работы над уровнем.
Допустим, планета небольшая, 5 экранов протяженность поверхности + каждый следующая высота от центра должна быть протяжённее предыдущей (т.е на уровне "мантии" протяжённость поверхности 3 экрана, на уровне грунта - 5, в атмосфере - 7). При таких требованиях вряд ли можно реализовать "нечестными" методами.
а таки зачем?
если искажения видны то диаметр и соответственно периметр у вашей планеты малы и соответственно уровень будет коротким.
ну и при маленькой планете искажения будут не только визуальными
вектор гравитации будет меняться довольно быстро за что вам игроки вряд ли скажут спасибо
А что конкретно - зачем?
В целом - такая геймдизайнерская задумка, подробнее описывать долго и вряд ли нужно.
Про искажения - согласен, логично. Подразумевается, что уровни будут разными по длине, и если для большой планеты искажения поверхности практически незаметны - всё равно хочется подтянуть реализацию к единообразию, хотя в этом случае можно было бы обойтись плоским замкнутым миром. С другой стороны, прельщает возможность плавного перехода от полного обзора планеты к персонажу на поверхности.
Про вектор гравитации - если имеется в виду то, что должны быть изменения в гравитации в зависимости от расстояния до центра - то это, в данном случае, не проблема, как и в принципе в гравитации, мне бы с круглой поверхностью разобраться...
Как вариант hex sphere. А сделать гравитацию в центр относительно просто. Берем rigibody, нормализируем его позицию, умножаем на -g(минус нужен чтобы развернуть вектор во внутрь), прибавляем как импульс и повторяем для всех остальных rigibody.
Спасибо за ссылочку, но на сколько мои знания англицкого позволяют разглядеть картинки - это всё-таки генерируемое 3д, а я вот задумываюсь о "ручном" 2д.
weblucker Тогда можно расплющить сферу в плоскость и подгружать нужные гексы. В теории можно сделать и обычные квадраты, но потом будут проблемы с соединением всего этого в виртуальную планету, а вот с гесами все хорошо(если знаеш как их расположить)
Станислав Силин, именно это и есть основная проблема - квадраты в сферу не соединяются)
Превращение сферы плоскость - задумка неплохая, но, к сожалению, в моём случае не подходит. Я ещё покопался и пришёл к выводу, что на Юнити простой реализации нет, вероятно.