Unity:从地形创建纹理

时间:2019-11-17 01:23:18

标签: c# unity3d unity3d-terrain

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

现在,我希望从Map中获取一个Terrain,而不是一个小地图,而是一个完整地图,并另存为2D Texture

首先我想到了RenderTexture,但是如果我用Camera来捕捉整个Terrain,结果取决于分辨率方面,并且我也会遇到导致{ width中的{1}}是Terrain中的3.2x

是否有更好的方法来解决此问题?

2 个答案:

答案 0 :(得分:1)

  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(基于RafalWiliński的this answer):

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

答案 1 :(得分:-1)

针对此问题,有四种解决方案按优先顺序排列:

  1. 显示缩放到屏幕垂直分辨率的图像,并创建水平滚动机制。对于屏幕外的目标,可能需要其他指示器。

  2. 以完整或均匀缩放的分辨率显示地图,并具有完整的X,Y滚动。

  3. 按比例缩小图像以适合屏幕宽度。这将在屏幕的顶部和底部创建“信箱”边框。

  4. 将整个图像缩放到屏幕分辨率。导致严重失真。

没有解决长宽比问题的“灵丹妙药”。