반응형
반응형
이번 글에서는 런타임에서 터레인을 이용해 지형편집이 가능한 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 |