프로젝트 일지/Unity

[Unity/TIL] '오집마' 프로젝트 개발 일지 - 그리드 배치 시스템

톰마토 2025. 5. 1. 15:56
728x90

타워 - 그리드 배치 시스템

중간 발표가 다가오면서 개발을 중단하고 발표 준비를 하고 있다. 내가 구현했던 그리드 배치 시스템을 정리해보았다.

월드좌표 ↔ 그리드 좌표 변환

Unity의 Grid에서 제공하는 WorldToCell, GetCellCenterWorld 사용해서 그리드 단위로 위치시켰다. 


타워 배치 가능 구역 체크

  1. 이미 배치된 칸인지 체크
    이미 배치된 타워들의 위치 정보를 HashSet<Vector3Int> placedMap 에 저장하고 있다.

    HashSet을 사용한 이유
    → 타워 배치 정보는 중복 불허 & 삽입과 삭제가 자주 일어난다. (HashSet의 삽입,삭제 : O(1))
    → 배치 해제 / 재배치에도 효율적 

  2. Ray2D로 배치 가능한 LayerMask 체크

타워 배치 가능 구역들


슬롯에서 끌어다 배치

유니티에서 제공하는 UnityEngine.EventSystems 인터페이스 활용 : IBeginDragHandler, IDragHandler, IEndDragHandler

슬롯에서 끌어다 배치


맵 내 편집모드

오브젝트들의 드래그를 위한 별도의 DragController를 구현했다. 

Ray2D로 드래그 가능한 Layer를 감지 && 몇 초 이상 클릭 ⇒ 드래그 인식

  • 유니티에서 제공하는 UnityEngine.EventSystems 인터페이스를 활용하지 않고 따로 만든 이유
    • UnityEngine.EventSystems 인터페이스 기반 드래그는 UI 전용 시스템이라, 오브젝트마다 Canvas와 Graphic Raycaster, UI요소를 붙여줘야한다. ⇒ 불필요한 컴포넌트를 강제로 추가해야 하고, 성능 저하 및 관리 복잡성을 초래할 수 있다.
    • 따라서 별도의 Input기반 DragController를 만들어 게임 오브젝트도 드래그할 수 있도록 직접 처리했다. 

편집모드 드래그

728x90