Призыв о помощи: Проблемы с процедурной генерацией

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

Благодаря ютубу мне удалось откопать нужный скрипт процедурной генерации, который помог мне реализовать саму концепцию. Скрипт отличный, ролик рекомендую, тк несмотря на 2017, большинство команд не outdated и скрипт работает именно так, как заявлено в ролике, я проверил.

Только вот сам автор ролика тоже где-то нашел этот скрипт. И также как и я не очень понимает как этот скрипт работает, но попытался адаптировать его.

ссылка на файлы автора ролика

Трабл №1: Скрипт Player Zero или рендеринг освещения и объектов при длительном путешествии

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

Однако в данном случае речь идет об одном скрипте который должен был помочь и обнулять позицию игрока на карте, чтобы движку не нужно было рендерить новые области, сам игрок вроде бы бежит но остается на месте:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerZero : MonoBehaviour { [SerializeField] private TerrainController terrainController; [SerializeField] private float distance = 10; private void Update() { if (Vector3.Distance(Vector3.zero, transform.position) > distance) { terrainController.Level.position -= transform.position; transform.position = Vector3.zero;//only necessary if player isn't a child of the level } } }

И, при применении этого кода к моему проекту, он выдает такой результат:

Если это важно (мне кажется да), в моем стеке проекта есть только:
1. Game Creator и с помощью которого было реализовано управление и камера
2. Procedural Kit.
3. Скрипты из видеоролика.

Так что сам проект достаточно чистый, чтобы минимизировать количество областей, из-за которых могла случиться такая проблема.

Трабл №2: Вытаскивание объекта процедурной генерации в область взаимодействия игрока

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

Тут скорее вопрос: правильно ли я понимаю, что для решения этой проблемы имеет смысл создать массив для объектов, которые забирает игрок и данную проблему можно решить делая дубликат объекта?

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

Трабл №3 Текстуры шума

Это уже конечно совсем акт беспомощности, думаю с этим я точно разберусь сам.

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

Призыв о помощи: Проблемы с процедурной генерацией

Спасибо за внимание!

Уверен, для большинства здешних читателей которые работают с Unity — проблемы могут показаться примитивными. И, наверное, я могу их решить собственными силами если немного помучаюсь, в этом ведь суть программирования.

Однако, ничего не могу поделать с тем, что у меня внутри что-то откликнулось выставить эти вопросы на обсуждение) И поделиться роликом с хорошим рабочим скриптом, в этом есть определенная польза, как мне кажется!

Буду рад любым ответам, помогити плз.

1313 показов
611611 открытие
23 комментария

Задача актуальна еще? Если так, то могу завтра закинуть скрипт с генератором ландшафта и объяснением его работы) 

Ответить

да, давай! будет оч круто, спасибо большое!

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

Ответить

Однако в данном случае речь идет об одном скрипте который должен был помочь и обнулять позицию игрока на карте,

Лучше этого не делать, особенно если есть физические объекты на карте. 

Ответить

хм, получается, лучше не трогать координаты игрока или сделать луп но без постоянного обнуления?

допустим если игрок достигает координаты Х 100, то его следующий шаг будет Х -100, а террейн новым тк он меняется при передвижении игрока

Ответить

В целом рекомендую сделать на основе террейна (просто большого), не использовать выключение отдаленных элементов ландшафта и все такое, террейн сам это нормально умеет делать. Объекты на карту расставить отдельно, после генерации и вот их уже выключать и включать при приближении (а лучше использовать просто лоды).

Ответить

вот по поводу этого интересно очень! тк у меня со спаунерами решение оказалось в целом эффективным и я вот думаю, тут либо рил отдельно расставлять объекты на карту (но как они будут считывать геометрию террейна?) и ставить их какнибудь высоко чтобы они при генерации террейна перед игроком - падали под воздействием гравитации или были с рейкастом который искал бы поверхность для появления

или

сделать как в том скрипте филд для расположения объектов на террейне? чтобы раскидывать рандомом спаунеры, которые создавали бы интерактивные объекты вроде людей, корованов и тд

Ответить

 при замене нойза с Перлина на любой другой 2д шум, скрипт выдает такую ошибку:

И в этой ошибке написано, как ее решить. В настройках импорта текстуры нужно поставить галку read/write enabled 

Ответить