728x90
타워 - 그리드 배치 시스템
중간 발표가 다가오면서 개발을 중단하고 발표 준비를 하고 있다. 내가 구현했던 그리드 배치 시스템을 정리해보았다.
월드좌표 ↔ 그리드 좌표 변환
Unity의 Grid에서 제공하는 WorldToCell, GetCellCenterWorld 사용해서 그리드 단위로 위치시켰다.
타워 배치 가능 구역 체크
- 이미 배치된 칸인지 체크
이미 배치된 타워들의 위치 정보를 HashSet<Vector3Int> placedMap 에 저장하고 있다.
HashSet을 사용한 이유
→ 타워 배치 정보는 중복 불허 & 삽입과 삭제가 자주 일어난다. (HashSet의 삽입,삭제 : O(1))
→ 배치 해제 / 재배치에도 효율적 - Ray2D로 배치 가능한 LayerMask 체크
슬롯에서 끌어다 배치
유니티에서 제공하는 UnityEngine.EventSystems 인터페이스 활용 : IBeginDragHandler, IDragHandler, IEndDragHandler
맵 내 편집모드
오브젝트들의 드래그를 위한 별도의 DragController를 구현했다.
Ray2D로 드래그 가능한 Layer를 감지 && 몇 초 이상 클릭 ⇒ 드래그 인식
- 유니티에서 제공하는 UnityEngine.EventSystems 인터페이스를 활용하지 않고 따로 만든 이유
- UnityEngine.EventSystems 인터페이스 기반 드래그는 UI 전용 시스템이라, 오브젝트마다 Canvas와 Graphic Raycaster, UI요소를 붙여줘야한다. ⇒ 불필요한 컴포넌트를 강제로 추가해야 하고, 성능 저하 및 관리 복잡성을 초래할 수 있다.
- 따라서 별도의 Input기반 DragController를 만들어 게임 오브젝트도 드래그할 수 있도록 직접 처리했다.
728x90
'프로젝트 일지 > Unity' 카테고리의 다른 글
[Unity/TIL] 트러블 슈팅 - 예상치 못한 생성자 호출과 텅 빈 생성자 Parameter 에 당황한 썰 (3) | 2025.05.07 |
---|---|
[Unity/TIL] UI Button 클릭 안 먹는 이유 뭐였게-요 (5) | 2025.05.02 |
[Unity/TIL] '오집마' 프로젝트에서의 오브젝트 풀링 (Object Pooling) (3) | 2025.04.30 |
[Unity/TIL] Firebase Realtime Database 연동 (4) | 2025.04.29 |
[Unity/TIL] '오집마' 프로젝트 개발 일지 - 버그 수정, UX 개선, 남은 기능 구현 (10) | 2025.04.28 |