시스템은 돌아갔다. 근데 아무것도 안 보였다.
회색 바닥에 캡슐이 돌아다니는 게 전부였다. 기능은 있는데 게임처럼 안 느껴졌다. 이 상태로 코딩만 계속하다가는 동기부여가 바닥날 것 같았다. 눈에 보이는 게 필요했다.
그래서 맵을 만들기로 했다.
Kenney – 무료 에셋의 창고
돈을 안 쓴다는 원칙을 세웠다. 게임이 완성되기 전까지는 무료 에셋만 쓰는 거다.
그래서 찾은 게 kenney.nl이다.
완전 무료에 상업 출시도 허용된다. 퀄리티는 로우폴리 감성인데, 아이소메트릭 시점에서 내려다보면 오히려 잘 어울린다. 디테일은 아쉽겠지만 내 스타일대로 가기로 했다.

독수파출소 맵에 쓴 에셋은 세 가지다.
City Kit (Roads) – 도로, 인도, 교차로 모듈. kenney.nl/assets/city-kit-roads
City Kit (Commercial) – 상가 건물, 저층 건물, 고층 건물 모듈. kenney.nl/assets/city-kit-commercial
Car Kit – 차량 모델. 순찰차는 여기서 색상만 바꿔서 썼다. kenney.nl/assets/car-kit
도로는 코드로 – 삽질이 많았다
건물은 많아야 20~30개라 직접 배치해도 되지만, 도로는 수백 개 타일이 필요하다. 하나씩 손으로 놓으면 시간이 너무 오래 걸린다. 그래서 MapGenerator.cs라는 에디터 툴을 만들어서 버튼 하나로 도로 전체를 생성하게 했다.
근데 여기서 삽질이 꽤 있었다.
첫 번째 문제 – 도로 타일이 한 칸씩 띄어서 깔렸다.
처음에 tileSize = 1로 설정했는데, Kenney 도로 타일의 실제 메시 크기가 1 unit이 아니었다. 타일 간격은 1씩 벌어지는데 타일 자체 크기는 달라서 빈 공간이 생겼다.

tileSize = 3으로 바꾸고 타일 스케일도 같이 키우는 코드를 추가해서 해결했다.
void PlaceTile(GameObject prefab, Vector3 pos, float rotY, string label)
{
GameObject obj = PrefabUtility.InstantiatePrefab(prefab, mapParent) as GameObject;
obj.transform.position = pos;
obj.transform.rotation = Quaternion.Euler(0f, rotY, 0f);
obj.transform.localScale = Vector3.one * tileSize; // 이 줄이 핵심
obj.name = prefab.name + "_" + label;
}
두 번째 문제 – 도로 방향이 전부 반대로 깔렸다.
동서 방향 도로를 깔았는데 남북으로 깔렸다. Kenney road-straight 에셋의 기본 방향이 내가 예상한 것과 반대였던 거다. 회전값 0도와 90도를 전부 바꿔야 했다. defaultIsNorthSouth라는 bool 변수를 Inspector에 노출해서 에셋마다 직접 맞출 수 있게 했다.


세 번째 문제 – 플레이어가 도로 아래로 추락했다.
도로 타일을 깔고 나서 게임을 실행했더니 캐릭터가 바닥을 뚫고 아래로 떨어졌다. 도로 타일이 기존 Ground 위에 올라갔는데, 도로 타일 자체에 Collider가 없어서 그 아래 Ground Collider가 작동했다. yOffset을 0으로 맞추고 Ground를 도로 아래로 낮춰서 해결했다.
이것저것 튕기면서 맞춰나가다가 결국 tileSize = 3, defaultIsNorthSouth = false가 맞는 설정이라는 걸 확인했다. 코드 짜는 것보다 이 설정값 맞추는 데 시간이 더 걸렸다.
건물은 직접 배치
도로가 깔리고 나서 건물은 직접 손으로 배치했다. HTML로 만들어둔 설계도를 모니터 한쪽에 띄워놓고 Unity 씬에서 Kenney 건물들을 드래그해서 넣었다.

kenney의 모든 건물을 나열하고 그중에서 나한테 필요할만한 건물들을 추려내는 방식으로 작업했다.
size는 10으로 하면 사람대비 크기가 적당해 보였다.

현재까지 진행상황이다.
참새아파트 – building-j를 여러 동 나란히 배치. Empty Parent로 묶어서 단지 단위로 관리.
무궁대병원 – building-skyscraper-b를 가져다가 Scale X를 늘리고 위치를 조정했다. 병원은 넓고 웅장한 느낌이 나야 해서 고층 건물을 옆으로 눌러서 만들었다.
독수역 상권 – building-i 두 개를 붙여서 하나의 큰 상가처럼 표현했다.
나머지 구역은 아직 진행 중이다.
지금까지 완성된 구역
| 구역 | 상태 | 사용 에셋 |
|---|---|---|
| 도로 전체 | 완성 | Kenney Roads (코드 생성) |
| 참새아파트 | 완성 | building-j |
| 무궁대병원 | 완성 | building-skyscraper-b 변형 |
| 독수역 상권 | 완성 | building-i x2 |
| 보라파출소 | 진행 중 | – |
| 독수초·독수중 | 예정 | – |
| 독수리마트 | 예정 | – |
설계도가 없었으면 못 했을 것 같다
건물을 배치하면서 제일 도움이 됐던 건 미리 만들어둔 HTML 설계도였다. 각 장소마다 어떤 신고가 주로 발생하는지, Unity 좌표 기준이 어디인지가 다 들어있어서 “여기는 뭐 놓지?” 고민 없이 바로 손이 움직였다.
프로젝트를 진행하면서 느끼는 건데, 코딩이나 에셋 작업보다 “뭘 만들지”를 미리 정해두는 준비 과정이 실제 속도를 더 많이 결정하는 것 같다.
방향을 잘못 잡으면 한참 갔다가 다시 돌아와야 하기 때문에 신중할 수 밖에 없다.
다음 글에서는 조리사 사찰 언덕 지형 작업 이야기를 할 예정이다.