Как я решил делать рогалик на Unity. Часть 2
Всем привет!
Предыдущая часть: Как я решил делать рогалик на Unity
Итак, продолжаем наш путь в создании рогалика. Мы уже создали двумерный "набор точек" в плоскости XY для поверхности локации. Теперь нам надо сделать интерпретатор этого массива, который будет генерировать меш поверхности.
В прошлом посте для "тестового вывода" я сделал простое расширение по оси Z. Однако, это топорно. Нам нужно некое пространство для творчества, поэтому создадим некий паттерн расширения в плоскости YZ. Теперь мы просто перемножим всё это дело друг на друга:
Иии... Хоба! Получаем более интересную поверхность.
Тут же следует отметить, что меш мы будем генерировать с динамической топологией, так как нам не нужна проработанная полигональная сетка вдали от игрока. Это приведет к неким артефактам, но в целом терпимо.
Вот так выглядит динамическая топология "в жизни". Можно заметить те самые артефакты на примере реки: речная впадина вдали превращается во что попало. Но это не беда, в дальнейшем мы наложим воду и игрок не узнает ни о каких проблемах со дном :)
Теперь ещё пара моментов. Во-первых, чтобы игрок видел фон даже в том случае, когда подходит к краю карты, мы расширим фон по сторонам.
А во вторых, сделаем тёмную плашку снизу, чтобы при поворотах камеры вниз под землей было темно. О чём тут речь, можно понять глянув на случай, когда персонаж прыгнет в реку:
Ещё о нескольких не очевидных штуках: На самом деле у нас будет целых три меша поверхности:
1) Передняя поверхность
2) Упрощенная передняя поверхность (для физики)
3) Фоновая поверхность
Если со вторым всё понятно (ни к чему нам в физических просчетах лишние треугольники), то зачем разделять перед и фон? Всё дело в различных материалах. Передняя поверхность будет иметь более гибкий шейдер. А фон, что фон? Фону и так нормально живется.
Теперь у нас есть базовая генерация меша поверхности, которая в дальнейшем ещё будет допиливаться. Но это потом. А сейчас, пожалуй, сконцентрируемся на других штуках.
Так, например, я завез набросок системы смены дня и ночи. На данный момент она реализована очень просто: в зависимости от времени дня крутируем направление солнца и его силу, меняем текстурку неба, добавляем туман. Выглядит просто, но является основной. Так как дальнейшая работа по системе смены дня и ночи сведется к подбору соответствующих цветов, отрисовке облаков и т.д.
На этом на сегодня всё. Если следующий пост и будет, то в нём расскажу более подробно про создание игрового персонажа.