GridMap(그리드맵) 사용하기

소개

GridMap은 2D 게임의 TileMap과 유사한 방식으로 3D 게임 레벨을 만드는 도구입니다. 격자 위에 메시를 배치하려면, 미리 정의해 놓은 3D 메시 모음 (class_MeshLibrary)이 필요합니다. 메시 모음은 마치 무한한 레고 블록처럼 사용됩니다.

충돌과 내비게이션도 메시에 추가될 수 있습니다. TileMap의 타일과 똑같죠.

예제 프로젝트

어떻게 GridMap이 작동하는지 배우려면, 샘플 프로젝트를 다운로드하세요: gridmap_demo.zip.

프로젝트 압축을 풀고 "가져오기(Import)" 버튼으로 프로젝트 매니저(Project Manager)에 추가하세요.

MeshLibrary 만들기

시작하려면 class_MeshLibrary가 필요합니다. MeshLibrary는 개별 메시들의 모음으로 그리드맵에 쓸 수 있습니다. "MeshLibrary_Source.tscn" 씬을 열어서 어떻게 MeshLibrary가 설정되어 있는지 확인하세요.

../../_images/gridmap_meshlibrary1.png

보다시피, 이 씬은 루트로 class_Spatial 노드를 갖고 있습니다. 그리고 많은 class_MeshInstance 노드 자식을 갖고 있죠.

씬에서 물리 엔진이 필요 없다면, 이게 끝입니다. 하지만 대부분의 경우, 메시에 충돌 바디가 필요할 것입니다.

충돌(Collision)

각 메시마다 일일이 class_StaticBodyclass_CollisionShape를 지정할 수 있습니다. 아니면 "메시(Mesh)" 메뉴에서 메시 데이터를 기반으로 한 충돌 바디를 자동으로 만들 수 있습니다.

../../_images/gridmap_create_body.png

"Convex" 충돌 바디는 단순한 메시에 더 잘 작동합니다. 복잡한 형태라면 "Trimesh Static Body 만들기(Create Trimesh Static Body)"를 선택하세요. 각 메시마다 PhysicsBody와 ColliisionShape를 가졌다면, MeshLibrary를 사용할 준비가 되었습니다.

../../_images/gridmap_mesh_scene.png

머티리얼(Materials)

MeshLibrary를 생성할 때는 메시 안에 있는 머티리얼만 사용됩니다. 노드에 설정된 머티리얼은 무시됩니다.

MeshLibrary 내보내기

MeshLibrary를 내보내려면, 씬(Scene) -> 다음으로 변환하기...(Convert To...) -> 메시 라이브러리(MeshLibrary)를 클릭하고, 리소스로 저장하세요.

../../_images/gridmap_export.png

프로젝트에서 내보낸 MeshLibrary를 "MeshLibrary.tres"라는 이름으로 볼 수 있습니다.

GridMap 사용하기

새 씬을 만들고 GridMap 노드를 추가하세요. 파일 시스템(FileSystem) 독에서 리소스 파일을 드래그한 다음, 인스펙터(Inspector)의 "Mesh Library" 속성에 드롭해서 MeshLibrary를 추가하세요.

../../_images/gridmap_main.png

"Cell/Size" 속성은 메시의 크기를 설정합니다. 데모에서는 기본 값으로 두어도 됩니다. "Center Y" 속성을 끄세요.

이제 레벨을 설계할 수 있습니다. 팔레트에서 타일을 선택하고, 편집기 창에서 좌클릭으로 배치합니다. 타일을 지우려면, Shift+우클릭하면 됩니다.

"그리드맵(GridMap)" 메뉴를 클릭하면 설정과 단축키를 볼 수 있습니다. 예를 들어, "S" 키를 누르면 타일을 Y축으로 회전합니다.

../../_images/gridmap_menu.png

<Shift>를 누른 채로 좌클릭 드래그를 하면 선택 항목 상자가 만들어 집니다. 메뉴 설정에서 선택한 영역을 복제하거나 지울 수 있습니다.

../../_images/gridmap_select.png

메뉴에서 타일이 배치되는 격자의 높이와 축도 바꿀 수 있습니다.

../../_images/gridmap_shift_axis.png

코드로 GridMap 사용하기

노드의 메서드와 멤버 변수에 대한 자세한 설명은 class_GridMap을 참고하세요.