Unity: создание текстуры из ландшафта
У меня есть процедурный сгенерированный Terrain
, на основе Unity's Terrain System
.
Теперь я хочу Map
из Terrain
, не миникарту, а полную карту, которая сохраняется как 2D Texture
.
Сначала я подумал о RenderTexture
, но если я возьму Camera
поймать все Terrain
, результат зависит от аспекта разрешения, и у меня также есть проблемы, потому что width
из Terrain
является 3.2x
в length
.
Есть ли лучший способ решить эту проблему?
2 ответа
Сделайте новую камеру и разместите ее над местностью.
Убедитесь, что он находится в режиме орфографии
Установить
camera.aspect
поле дляterrainData.size.x / terrainData.size.z
Установить
camera.orthographicSize
поле дляterrainData.size.z/2f
Убедитесь, что рамка камеры ориентирована по осям местности. Что-то вроде
cam.transform.LookAt(terrain.GetPosition(), terrain.transform.forward);
сделает свое дело.
Затем вы сможете создать RenderTexture
с желаемым разрешением пикселей (на основе этого ответа Рафала Вилински):
int resHeight = 1000;
int resWidth = Mathf.RoundToInt(resHeight * camera.aspect);
RenderTexture rt = new RenderTexture(resWidth, resHeight, 24);
camera.targetTexture = rt; //Create new renderTexture and assign to camera
Texture2D screenShot = new Texture2D(resWidth, resHeight, TextureFormat.RGB24, false); //Create new texture
camera.Render();
RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0); //Apply pixels from camera onto Texture2D
camera.targetTexture = null;
RenderTexture.active = null; //Clean
Destroy(rt); //Free memory
тогда ваша местность будет захвачена в screenshot
Есть четыре решения этой проблемы в порядке предпочтения:
Отобразите изображение, масштабированное до вертикального разрешения экрана, и создайте механизм горизонтальной прокрутки. Для этого могут потребоваться дополнительные индикаторы для целей за пределами экрана.
Отображение карты с полным или равномерно уменьшенным разрешением с полной прокруткой по осям X,Y.
Уменьшите масштаб изображения по ширине экрана. Это создаст границы "почтового ящика" вверху и внизу экрана.
Масштабируйте все изображение до разрешения экрана. Вызывает серьезные искажения.
Не существует "волшебной пули" решения проблем с соотношением сторон изображения.