유니티 엔진 - 게임 프로젝트/타워 디펜스 게임

레벨 생성 - 최종) 타일 추가와 타일맵의 NavMesh 수정

monstro 2026. 6. 9. 19:03
728x90
반응형

- 개요

생성할 수 있는 타일의 종류를 추가하고 

타일 오브젝트를 다른 타일로 변경하는 경우 Layer를 수정하여 NavMesh Surface를 다시 굽는 로직을 추가한다

 

- 스크립트 작업

1) TileSetHolder 클래스

 

타일의 종류를 모아놓는 컴포넌트의 클래스작은 코너 타일을 추가한다

 

2) TileSlotEditor 클래스

 

OnInspectorGUI 함수에 로직을 추가하여 코너 타일의 UI에 행을 추가하고 작은 타일로 변경하는 버튼을 생성한다

 

3) TileSlot 클래스

 

GetTileNavMeshSurface 함수를 추가하여 부모 오브젝트NavMeshSurface 컴포넌트를 반환한다

UpdateNavMeshSurface 함수를 호출하여 새롭게 NavMesh Surface를 굽는

 

 

UpdateTileLayer 함수를 추가하여 위와 같이 구성하였다

GetStaticEditorFlags 함수를 호출하여 변경할 타일 오브젝트의 물리 / 최적화 설정을 저장하고

SetStaticEditorFlags 함수를 호출하여 변경하기 이전의 타일 오브젝트에 덮어씌운다

 

 

RotateTile 함수 AdjustVertical 함수에 위와 같이 로직을 추가하여

트랜스폼이 변경되면 NavMesh Surface를 다시 굽도록 설정한다

 

 

에디터인 경우에 위의 함수를 호출하도록 설정한다

Undo 또는 Redo가 실행되면 UpdateNavMeshSurface 함수를 호출하여 NavMesh Surface를 조정한다

 

 

SwitchTile 함수의 로직을 일부 분리하여 UpdateChildren 함수를 위와 같이 구성한다

이전의 로직에서 부모 오브젝트의 물리 설정을 저장하고 자식 오브젝트에 적용하는 로직을 추가하였다

최종적으로 자식 오브젝트의 트랜스폼 + Layer를 설정한다

 

 

SwitchTile 함수의 로직을 위와 같이 구성하였다

Undo.RegisterCompleteObjectUndo 함수를 호출하여 변경하기 이전의 타일 오브젝트를 기록한다

또, Undo.RecordObject 함수를 호출하여 오브젝트의 변경 사항Undo에 기록한다

이후 3개의 함수를 호출하여 타일 오브젝트를 수정한 후자식 오브젝트 + Layer + NavMesh Surface를 조정한다

 

4) GridBuilder 클래스

 

GetNavMeshSurface 함수를 추가하여 NavMesh Surface 컴포넌트를 반환한다

 

 

UpdateNavMesh 함수를 호출하여 NavMesh Surface를 다시 굽고,

ClearNavMesh 함수를 호출하여 존재하는 NavMesh Surface제거한다

 

 

에디터인 경우에 위의 함수를 호출하도록 설정한다

Undo 또는 Redo가 실행되면 UpdateNavMeshSurface 함수를 호출하여 NavMesh Surface를 조정한다

 

 

BuildGrid 함수에 위와 같이 로직을 추가한다

타일 맵이 생성되면서 만들어지는 다수의 타일 오브젝트Undo 그룹에 기록한다

타일 맵이 생성된 후에 UpdateNavMesh 함수를 호출하여 NavMesh Surface를 생성한다

기록된 Undo 그룹을 하나로 뭉쳐 Undo 또는 Redo할 수 있도록 설정한다

 

 

ClearGrid 함수에 위와 같이 로직을 추가한다

타일 맵이 제거되면서 제거되는 다수의 타일 오브젝트 Undo 그룹에 기록한다

타일 맵이 제거된 후에 ClearNavMesh 함수를 호출하여 NavMesh Surface를 제거한다

기록된 Undo 그룹을 하나로 뭉쳐 Undo 또는 Redo할 수 있도록 설정한다

 

- 애셋 작업

1) GridBuilder 오브젝트

 

위와 같이 타일 맵을 생성하는 오브젝트에 컴포넌트가 수식될 수 있도록 설정한다

  • TileSetHolder 컴포넌트 : 교체하거나 생성할 타일의 종류를 저장
  • GridBuilder 컴포넌트 : 지정한 타일로 구성된 타일맵을 생성
  • NavMesh Surface 컴포넌트 : Road 레이어로 지정된 적의 이동 경로를 생성

 

- 최종 실행 결과

728x90
반응형