유니티/3D 맵 에디터

[Unity] 3D 맵 에디터 - 1. 지형 편집

이름?없음 2024. 2. 28. 17:56
반응형
반응형

이번 글에서는 런타임에서 터레인을 이용해 지형편집이 가능한 3D 맵 에디터를 만들어 보겠습니다

 

일단 사전 준비를 해보겠습니다

 

먼저 터레인을 하나 생성해 주시고 

사이즈를 본인이 원하는 크기로 설정해 주세요

저는 카메라에 다 들어와야 해서 32*32로 설정하였습니다

 

그다음 Terrain이라는 레이어를 하나 추가해 주세요

아까 만든 터레인에 Terrain레이어를 넣어주세요

 

준비 과정은 다 끝났습니다 이제 코드를 작성할 차래입니다

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TerrainEditor : MonoBehaviour
{


    [SerializeField] private Terrain terrain;

    //터레인의 레이어
    [SerializeField] private LayerMask terrainMask;

    //강도
    [SerializeField] private float power = 3f;

    //터레인 데이터
    private TerrainData data => terrain.terrainData;

    //터레인의 높이를 표현하는 맵
    private float[,] heightMap;

    private void Awake()
    {

        //높이맵 받아오기
        heightMap = data.GetHeights(0, 0, data.heightmapResolution, data.heightmapResolution);

    }

    private void Update()
    {

        //마우스를 눌렀을시
        if (Input.GetMouseButton(0))
        {

            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            //레이 발사
            if (Physics.Raycast(ray, out var hit, 1000, terrainMask))
            {

                DrawTerrain(hit.point);

            }

        }

    }

    private void DrawTerrain(Vector3 point)
    {

        //마우스 좌표에 대응하는 heightMap인덱스 구하기
        int mousePosToTerrainX = (int)((point.x / data.size.x) * data.heightmapResolution);
        int mousePosToTerrainZ = (int)((point.z / data.size.z) * data.heightmapResolution);

        //높이 높여주기
        heightMap[mousePosToTerrainZ, mousePosToTerrainX] += Time.deltaTime / power;

        //높이 적용해주기
        data.SetHeights(0, 0, heightMap);

    }

}

 

실행해 보시면 마우스 부분의 터레인이 솟아오르는 모습을 확인하실 수 있습니다

 

하지만 이것이 지형 편집이라기에는 부족한 부분이 많습니다 다음 글에서는 브러시 시스템을 만들어 보도록 하겠습니다

반응형

'유니티 > 3D 맵 에디터' 카테고리의 다른 글

[Unity] 3D 맵 에디터 - 3. 지형 색칠  (0) 2024.02.29
[Unity] 3D 맵 에디터 - 2. 브러쉬  (0) 2024.02.29