본문으로 건너뛰기

고도 타일맵 충돌 · 타일 알파로 콜리전 자동 생성

타일 47개에 콜라이더를 하나씩 찍다 보면 시간도 들고, 한 픽셀만 어긋나도 캐릭터가 이음새에 걸립니다. 타일 작업 공간은 타일 알파에서 충돌 모양을 따고, 틀린 점은 끌어서 고치게 한 다음, Godot가 직접 실행하는 가져오기 스크립트로 물리 레이어까지 만들어 줍니다.

Godot 4에서 타일 충돌은 TileSet에 들어 있습니다. 물리 레이어(충돌 레이어와 마스크)를 추가하고 타일마다 충돌 폴리곤을 하나 이상 주며, 점 좌표는 타일 중심에서 잽니다. Nerulio는 타일마다 알파에서 폴리곤을 따고(외곽선, 정확한 사각형들, 상자 하나) 점을 옮길 수 있게 하며, 가져오기 스크립트가 충돌 레이어 1·마스크 1인 물리 레이어 0을 만들고 모든 폴리곤을 반 타일만큼 옮겨 씁니다. Godot 4.7.2에서 모든 폴리곤을 점 하나까지 다시 읽어 확인했습니다.

타일셋 또는 오토타일 시트(PNG)를 끌어다 놓으세요
빈 Studio 열기
브라우저에서 처리하며 파일은 업로드되지 않습니다.
Studio 타일 작업 공간: 모든 타일의 알파에서 충돌 폴리곤을 따낸 CC0 블롭 47 타일셋(16px)
CC0 에셋(OpenGameArt)을 연 실제 Studio 화면입니다.
내보내기 대상
  • Godot 4 TileSet검증됨· Godot 4.7.2
  • Tiled검증됨· Tiled 1.12.2
  • Unity 6 Rule Tile검증됨· Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3
  • LDtk일부 검증· LDtk 1.5.3 schema + loader

물리 레이어, 폴리곤, 그리고 타일 중심

TileSet에는 물리 레이어 목록이 있고, 레이어마다 충돌 레이어·충돌 마스크·선택적인 물리 재질이 있습니다(Godot 문서: TileSet 인스펙터 › Physics Layers › Add Element). 레이어마다 타일 하나가 폴리곤 여러 개를 가질 수 있고(TileData.set_collision_polygon_points(layer, index, points)), 각각 단방향으로 만들 수도 있습니다. TileMapLayer는 collision_enabled가 켜져 있으면(기본값) 칠한 타일을 정적 충돌로 만듭니다.

Nerulio는 모양을 그리는 방식 그대로 타일 픽셀 단위, 원점은 타일 왼쪽 위로 저장합니다. Godot는 타일 폴리곤을 타일 중심에서 재므로, 가져오기 스크립트가 모든 점에서 타일 크기의 절반을 뺍니다. 이 이동을 빠뜨리는 도구를 쓰면 모든 모양이 왼쪽 위로 반 타일 밀립니다.

알파를 읽는 방식은 세 가지입니다(알파가 0보다 크면 불투명으로 봄). 외곽선은 픽셀 경계를 따라 불투명한 가장자리를 따가며 바깥 고리만 남기므로 구멍은 막힙니다. 정확한 사각형들은 불투명 픽셀만 사각형 몇 개로 덮어 구멍이 열린 채 남습니다. 상자는 전체를 사각형 하나로 감쌉니다. 긴 외곽선은 점이 256개 이하가 될 때까지 단순화합니다.

물리 레이어
충돌 레이어·마스크·재질을 가진 TileSet의 칸. 타일은 칸마다 폴리곤을 저장합니다.
충돌 폴리곤
타일 중심 기준 점 목록. 안쪽 전체가 막힌 곳으로 취급됩니다.
충돌 레이어 / 마스크
타일이 속한 레이어와 감지하는 레이어. 몸체의 마스크에 타일의 레이어가 있어야 부딪힙니다.
반 타일 이동
왼쪽 위 기준 타일 픽셀 − (너비 ÷ 2, 높이 ÷ 2) = Godot의 중심 기준 좌표.

예시: 64px 땅 타일, 픽셀에서 Godot까지

64 × 64 타일, 아래 40px이 땅(픽셀 행 24–63)
Nerulio, 타일 픽셀(원점 왼쪽 위)   (0,24) (64,24) (64,64) (0,64)
반 타일 = (32, 32)
Godot, 타일 중심 기준              (-32,-8) (32,-8) (32,32) (-32,32)
가져오기  TileData.set_collision_polygon_points(0, 0, points)   물리 레이어 0, 폴리곤 0
TileSet   물리 레이어 0: collision_layer 1, collision_mask 1

CharacterBody2D는 collision_mask에 레이어 1이 있어야 이 타일 위에 섭니다. 프로젝트가 다른 레이어 번호를 쓰면 가져온 뒤 TileSet의 번호를 바꾸세요.

이렇게 작동합니다

  • 알파를 읽는 방식은 세 가지입니다. 외곽선 다각형은 불투명한 가장자리를 따라가고, 정확한 사각형들은 불투명 픽셀만 축 정렬 사각형으로 덮으며, 상자는 전체를 사각형 하나로 감쌉니다.
  • 모양은 타일 픽셀 단위로 정수에 맞춰집니다. 점은 끌어서 옮기고, 변을 더블클릭하면 점이 생기고, Alt+클릭하면 지워집니다. 편집 하나가 되돌리기 한 번입니다.
  • "모든 타일의 모양 표시"를 켜면 시트 전체의 충돌이 한꺼번에 보여, 이웃 타일 사이의 틈을 내보내기 전에 찾을 수 있습니다.
  • 내보낼 때 직접 고친 모양은 그대로 두고, 손대지 않은 타일만 고른 방식으로 알파에서 채웁니다.
  • nerulio_tileset_import.gd가 물리 레이어 하나(충돌 레이어 1, 마스크 1)를 추가합니다. Godot는 타일 중심을 기준으로 모양을 재기 때문에 반 타일만큼 옮겨서 씁니다.
  • Godot 4.7.2에서 만든 TileSet을 다시 읽어 모든 폴리곤이 점 하나까지 같음을 확인했습니다. 코퍼스 블롭 세트 49/49·48/48·47/47 타일, 지형 4개짜리 듀얼 그리드 팩 80/80.

사용 방법

  1. 타일셋을 넣고 "이 격자 사용"을 누릅니다.
  2. 배치를 적용하거나 지형 비트를 칠합니다. 비트가 있는 타일만 충돌 모양을 가질 수 있습니다.
  3. C를 누르고 타일을 골라 외곽선 다각형·정확한 사각형들·상자 중 하나로 딴 뒤, 어긋난 점을 끌어 맞춥니다.
  4. 내보내기(Ctrl+E)에서 Godot 4를 고르고, 손대지 않은 타일에 쓸 충돌 방식을 정합니다.
  5. Godot에서 nerulio_tileset_import.gd를 File › Run으로 실행하고, 저장된 TileSet을 TileMapLayer에 지정합니다.

받게 되는 파일

충돌은 내보내기의 Godot 파일 안에 들어갑니다.

파일용도
nerulio-tileset.jsonphysicsLayers(충돌 레이어 1, 마스크 1, 사용한 방식)와 타일마다 collision: 타일 픽셀 단위 폴리곤.
nerulio_tileset_import.gd물리 레이어를 추가하고 폴리곤마다 반 타일 이동을 적용해 씁니다. 출력 줄에 폴리곤 수가 나옵니다.
nerulio-tileset.tres스크립트를 실행하면 Godot가 저장하는, 지형과 충돌이 든 TileSet.

충돌을 Godot로 가져와 시험하기

  1. Nerulio 내보내기 패널에서 Collision (Godot)를 외곽선 다각형, 정확한 사각형들, 상자, 직접 고친 모양만 중 하나로 고릅니다. 기본값 None은 물리 레이어를 전혀 쓰지 않으며, 직접 고친 모양도 빠집니다.
  2. PNG·JSON·스크립트를 프로젝트 루트에 복사하고 File › Run으로 스크립트를 실행한 뒤 출력 줄을 확인합니다(예: … 47 tiles, 188 peering bits, 47 collision polygons …).
  3. TileMapLayer의 Tile Set 속성에 nerulio-tileset.tres를 넣고 칠합니다.
  4. 플레이어 몸체의 collision_mask에 레이어 1을 넣습니다(또는 TileSet 인스펙터에서 물리 레이어 0의 충돌 레이어를 프로젝트가 쓰는 번호로 바꿈).
  5. Debug › Visible Collision Shapes를 켜고 씬을 실행하면, 게임이 도는 동안 타일 위에 충돌 모양이 그려집니다.
  6. 단방향 발판이나 물리 재질은 TileSet 편집기 Select 모드에서 타일을 눌러 Physics Layer 0 섹션을 고칩니다. 거기서 F를 누르면 타일 전체 사각형이 바로 생깁니다.

결과 확인

  • 스크립트 출력 줄의 충돌 폴리곤 수가 예상과 같아야 합니다(상자와 대부분의 외곽선은 타일마다 하나).
  • TileSet 편집기 › Select 모드에서 타일을 누르면 Physics Layer 0 섹션에 그림 위의 폴리곤이 보입니다.
  • Visible Collision Shapes를 켜면 이웃한 땅 타일들의 윗변이 한 줄로 이어지고, 정확한 사각형들을 쓴 틈 있는 타일은 틈이 보여야 합니다.
  • print($TileMapLayer.tile_set.get_physics_layer_collision_layer(0))가 1을 출력합니다.

충돌 방식별로 Godot에 들어가는 것

방식써지는 모양구멍어울리는 타일
외곽선 다각형픽셀 경계를 따라간 바깥 윤곽, 불투명 덩어리마다 폴리곤 하나메워짐(바깥 고리만)경사, 둥근 턱, 울퉁불퉁한 바위
정확한 사각형들합치면 불투명 픽셀과 꼭 같은 축 정렬 사각형 몇 개열린 채 유지틈이 있는 타일, L자, 홈이 파인 발판
상자투명하지 않은 픽셀 전체를 감싸는 사각형 하나메워짐꽉 찬 블록, 나무 상자, 가벼운 물리
편집한 모양만직접 고친 폴리곤만, 나머지 타일은 없음그린 그대로일부 타일만 부딪혀야 할 때
없음물리 레이어를 만들지 않음—장식용 타일셋

완전히 불투명한 타일은 상자와 정확한 사각형들에서 타일 크기 사각형 하나가 됩니다. 외곽선이 길면 타일당 점이 256개 이하가 될 때까지 단순화합니다.

문제 해결

증상유력한 원인확인 방법해결
TileSet에 물리 레이어가 없음내보내기에서 Collision (Godot)를 None으로 둠출력 줄의 0 collision polygons충돌 방식을 골라 다시 내보내기
캐릭터가 타일을 통과해 떨어짐몸체 마스크에 레이어 1이 없거나 레이어의 collision_enabled가 꺼짐몸체와 TileMapLayer의 인스펙터마스크에 레이어 1을 추가하거나 TileSet 물리 레이어를 프로젝트 레이어로 바꾸기
모양이 왼쪽 위로 반 타일 밀림왼쪽 위 좌표를 이동 없이 쓴 도구에서 온 폴리곤Visible Collision Shapes이동을 적용하는 Nerulio 스크립트로 다시 가져오기
뚫린 타일이 전부 막힘외곽선은 바깥 고리만 남김TileSet 편집기의 타일 폴리곤그 세트는 정확한 사각형들로 하거나 그 타일의 점을 고치기
캐릭터가 타일 이음새에 걸림이웃 폴리곤의 높이가 1픽셀 차이 남Visible Collision Shapes로 이음새를 확대가득 찬 타일은 상자나 정확한 사각형들을 쓰거나, Studio 충돌 도구(C)에서 점 높이를 맞추기
일부 타일에 모양이 없음지형 비트가 있는 타일만 내보내며, 알파가 모두 0이면 모양이 없음Studio에서 비트 없는 타일은 흐리게 표시됨그 타일에 비트를 칠하거나 Godot에서 직접 모양을 그리기

다른 방법

방법이럴 때 더 낫습니다
Godot TileSet 편집기에서 폴리곤 그리기(F로 전체 사각형, 점 추가·삭제, 타일 속성 칠하기로 한 모양을 여러 타일에 복사)가득 찬 블록과 경사 몇 개일 때. 도구는 필요 없지만 모양마다 손으로 놓습니다.
타일이 아닌 스프라이트 충돌: 충돌 폴리곤 생성기모양이 TileSet 타일이 아니라 캐릭터나 소품에 속할 때.
Collider를 Grid로 둔 Unity Rule Tile: Unity Rule Tile대상이 Unity일 때. Nerulio가 딴 폴리곤은 Godot용으로만 씁니다.

엔진별 내보내기와 검증 방법

"검증됨"은 실제 CC0 에셋으로 내보낸 파일을 해당 엔진·도구가 직접 불러와 원본과 비교했다는 뜻입니다. 불러오지 않은 형식은 그렇게 표시합니다.

대상파일검증
Godot 4 TileSetPNG · nerulio-tileset.json · nerulio_tileset_import.gd검증됨 Godot 4.7.2포함된 가져오기 스크립트가 지형 피어링 비트가 설정된 TileSet을 만듭니다. set_cells_terrain_connect로 칠한 맵이 9개 코퍼스 시트의 모든 칸에서 Studio 미리보기와 같았습니다.
Tiled.tsx Wang set · sample.tmx검증됨 Tiled 1.12.2Tiled 자체 읽기 기능이 모든 Wang ID를 그대로 읽고 샘플 맵이 픽셀 단위로 동일하게 렌더링됩니다. 지형 브러시 자체는 실행하지 않았습니다.
Unity 6 Rule Tilenerulio-ruletile.json · Editor/NerulioRuleTileImporter.cs검증됨 Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3블롭·변 타일셋: 칠한 Tilemap의 모든 칸이 예측한 스프라이트와 같습니다. 모서리/듀얼 그리드 타일셋은 Unity로 내보내지 않습니다.
LDtk.ldtk (1.5.3) · rules · sample level일부 검증 LDtk 1.5.3 schema + loaderLDtk JSON 스키마와 공식 로더가 받아들이고 규칙을 다시 실행하면 내보낸 타일과 같습니다. LDtk 앱에서 열어 보지는 않았습니다.

검증 근거

타일 코퍼스에서 픽셀만으로 배치를 인식: 블롭 47 템플릿 4개와 Wang 템플릿 2개는 높은 신뢰도, 실제 64px 동굴 타일셋은 중간 신뢰도로 모든 타일의 비트가 정확. Godot 4.7.2가 모든 테스트 칸을 Studio 예측대로 칠함(블롭 세트마다 485/485, 지형 4개 듀얼 그리드 팩 251/251). Tiled 1.12.2가 모든 Wang ID를 다시 읽음. Unity 6000.5에서 블롭·변 세트의 칠한 모든 칸 일치.

한계

  • 물리 레이어 하나, 단순 폴리곤: 단방향, 추가 레이어, 물리 재질은 나중에 Godot에서 설정합니다.
  • 구멍은 정확한 사각형들에서만 정확합니다.
  • 지형 비트가 없는 타일은 내보내기에서 충돌이 없습니다.
  • Tiled 지형 브러시, LDtk 앱, Godot 편집기의 칠하기는 실행하지 않았습니다. 검증은 엔진의 읽기 기능과 set_cells_terrain_connect로 했습니다.
  • Unity로는 블롭·변 타일셋만 내보냅니다. 지형이 여러 개면 서로 이어지지 않는 Rule Tile 여러 개가 됩니다.
  • 아이소메트릭·육각 타일, 애니메이션 타일, 오클루전·내비게이션 레이어는 지원하지 않습니다.
  • 알려진 배치 없이 비트를 제안하려면 기준이 되는 "가득 찬" 타일이 필요합니다. 변만 있는 길 템플릿은 그 타일을 선택하기 전까지 추측이 틀릴 수 있습니다.

버전과 출처

Godot 4.7.2에서 저장된 TileSet을 다시 읽어 확인했습니다. 반 타일 이동 뒤 모든 폴리곤이 점 단위로 같았습니다. 코퍼스 블롭 세트에서 49/49, 48/48, 47/47타일, 변·모서리 템플릿에서 16/16, 지형 4개짜리 듀얼 그리드 팩에서 80/80. 편집기 단계는 Godot 4.7 공식 문서를 따릅니다.

참고한 공식 문서

자주 묻는 질문

캐릭터가 바닥을 뚫고 떨어져요. 물리 레이어가 들어간 건가요?

가져오기 스크립트는 모양이 있는 타일이 하나라도 있을 때만 물리 레이어를 추가하고, 충돌 레이어 1·마스크 1로 설정합니다. 캐릭터 바디의 충돌 마스크에 레이어 1이 들어 있어야 합니다. 다른 번호를 쓰는 프로젝트라면 가져온 뒤 TileSet에서 바꾸세요.

구멍 뚫린 타일이 꽉 막힌 충돌이 돼요.

외곽선 다각형은 바깥 고리만 남기고, Godot는 폴리곤 안쪽을 전부 단단한 것으로 봅니다. 그래서 구멍이 메워집니다. 정확한 사각형들은 불투명 픽셀만 덮으므로 구멍이 열린 채로 남습니다.

원웨이 플랫폼이나 타일별 레이어도 여기서 정하나요?

아니요. 내보내기는 물리 레이어 하나와 폴리곤만 씁니다. 원웨이 충돌, 추가 레이어, 물리 재질은 가져온 뒤 Godot의 TileSet 편집기에서 정하세요.

유니티 타일맵 콜라이더나 Tiled, LDtk에도 들어가나요?

아니요, 충돌은 Godot용으로만 씁니다. Unity 룰 타일·Tiled·LDtk 내보내기에는 타일과 규칙만 들어가며, Unity 안에서의 타일 충돌은 확인하지 않았습니다.

무료인가요? 계정이 필요한가요?

이 페이지의 기능은 모두 무료이며 계정 없이 쓸 수 있습니다. 워터마크나 막혀 있는 내보내기가 없습니다.

스프라이트가 업로드되나요?

아니요. Studio는 이 브라우저 탭 안에서 디코딩·패킹·내보내기를 합니다. 프로젝트는 브라우저(IndexedDB)에 자동 저장되며 .nerulio 파일로 저장할 수 있습니다.

Aseprite나 엔진 플러그인을 설치해야 하나요?

아니요. .aseprite 파일은 브라우저에서 읽고 씁니다. 엔진별 번들에는 그 엔진에 필요한 것이 들어 있습니다(Godot는 가져오기 설정과 씬, Unity와 Godot 타일셋은 작은 편집기 스크립트).