首页 > 解决方案 > Unity:从地形创建纹理

问题描述

我有一个程序生成Terrain,基于Unity's Terrain System.

现在我想要一个Map来自 的Terrain,不是小地图而是完整的地图,保存为2D Texture.

首先我想到了a RenderTexture,但是如果我用aCamera来捕捉整体Terrain,结果取决于分辨率方面,而且我也有问题,因为widththeTerrain是。3.2xlength

有没有更好的方法来解决这个问题?

标签: c#unity3dunity3d-terrain

解决方案


  1. 制作一个新相机并将其放置在地形上。

  2. 确保它处于正交模式

  3. camera.aspect字段设置为terrainData.size.x / terrainData.size.z

  4. camera.orthographicSize字段设置为terrainData.size.z/2f

  5. 确保相机框架的方向与地形的轴一致。类似的东西cam.transform.LookAt(terrain.GetPosition(), terrain.transform.forward);可以解决问题。

然后,您应该能够RenderTexture使用您想要的像素分辨率创建一个(基于Rafal Wiliński 的这个答案):

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


推荐阅读