본문 바로가기
개발더미

[Unity] 유니티 Terrain에 지형 데이터 .tif 넣는 방법

by 스테디코디스트 2023. 11. 27.
반응형

- 유니티에서는 최대 4K까지 지원하는 듯

 

1. 지형 elevation파일(.tif)과 텍스쳐 이미지 파일(.tif)을 받는다.

 

2. 유니티 새로운 씬 생성

3. Hierarchy에서 Terrain 생성

 

4. 스크립트 작성(높이값을 반전)

using UnityEngine;

public class SetTerrainHeight : MonoBehaviour
{
    public Texture2D HeightMap;

    [ContextMenu("SetHeight")]
    public void SetHeight()
    {
        TerrainData terrainData = GetComponent<Terrain>().terrainData;

        int terrainWidth = terrainData.heightmapResolution;
        int terrainHeight = terrainData.heightmapResolution;
        float[,] heightValues = terrainData.GetHeights(0, 0, terrainWidth, terrainHeight);

        for (int terrainY = 0; terrainY < terrainHeight; terrainY++)
        {
            if (terrainY >= HeightMap.height)
            {
                break;
            }

            for (int terrainX = 0; terrainX < terrainWidth; terrainX++)
            {
                if (terrainX >= HeightMap.width)
                {
                    break;
                }

                Color heightColor = HeightMap.GetPixel(terrainY, terrainX);
                heightValues[terrainX, terrainY] = heightColor.r;
            }
        }

        terrainData.SetHeights(0, 0, heightValues);
    }
}

 

5. Terrain 오브젝트에 스크립트 삽입

- Add Component 클릭 -> 스크립트 이름 검색 후 선택

- 또는 스크립트를 드래그 앤 드랍으로 인스펙터 창에 끌어다 놓음

 

6. 스크립트의 Height Map 컴포넌트에 지형 Elevation 데이터 넣기(동글버튼 클릭 후 검색 또는 드래그 앤 드랍)

 

7. Mesh Resolution 설정 해상도에 맞는 Heightmap Resolution 설정 

- 4kmx4km 크기이므로 실제 크기와 맞게 Terrain의 높이와 너비를 각각 4000으로 설정

- elevation 데이터에서 가장 높은 위치는 202m, 가장 낮은 위치는 2m이므로 두 값의 차이값인 200으로 Terrain의 깊이값 설정

- 현재 elevation 데이터의 해상도는 1024x1024 이므로 Heightmap 데이터는 1025x1025로 설정

 

8. 작성한 스크립트 Set Terrain Height의 상단바(?)에서 우클릭 후 Set Height 클릭

 

좌) SetHeight 클릭 전 기본 Terrain의 모습, 우) SetHeight 클릭 후 나타난 Height Map의 모습

 

9. 텍스쳐를 입히기 위해 두번째 메뉴 Paint Terrain으로 이동 후 Paint Texture로 변경 후 중간에 Edit Terrain Layers... 클릭

 

10. Create Layer 클릭 후 해당 텍스쳐 이미지 선택

 

11. 생성된 Layer를 선택하여 나오는 설정창에서 Tiling Settings의 Size를 조절하여 텍스쳐의 실제 크기를 맞춤

우) 적용 완료된 Terrain