[Unity] 타워 배치·합성 되돌리기 — 커맨드 구조
![[Unity] 타워 배치·합성 되돌리기 — 커맨드 구조](/_next/image?url=https%3A%2F%2Fdata.develog.develrocket.com%2Fupload%2Fdevelog%2Fuser_1777093328305%2F1785768057722-yybm6c%2F_____2026-08-03_233853.png&w=3840&q=75)
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
이번에 넣은 되돌리기 기능은 IReversibleCommand 인터페이스 하나를 중심으로 돌아간다. 이 인터페이스는 Execute, Confirm, Commit, Undo 네 메서드와 IsConfirmed 프로퍼티를 가지고 있고, 타워 배치를 감싸는 TowerPlaceCommand와 타워 합성을 감싸는 TowerMergeCommand가 이를 구현한다.
커맨드를 담아두는 곳은 CommandHistory static 클래스다. 내부에 List 스택을 두고 LIFO로 쌓는다.
스택이 바뀔 때마다 OnChanged 이벤트를 쏴서 UI가 반응할 수 있게 한다.
배치된 GameObject, 실제로 지불한 비용, ManagementController 참조, 타일 크기를 들고 있다. 내부 상태는 Pending → Executed → Confirmed → Committed로 흐르거나 중간에 Undone으로 빠진다.
Undo가 호출되면 소멸 연출을 재생하고, TowerFootprint의 점유를 풀고, 오브젝트를 파괴한 뒤 지불했던 비용을 ManagementController.Grant로 되돌려준다. PlaysUndoDissolve 플래그를 따로 두어 이 연출 재생 여부를 제어하는데, 합성 결과로 편입된 경우엔 꺼둔다.
재료 타워들의 리스트와 타일 크기, 그리고 결과 타워의 TowerPlaceCommand를 참조로 들고 있다.
배치나 합성이 끝나면 각각의 커맨드가 만들어져 CommandHistory.Push로 등록된다. 합성의 경우엔 결과 배치 커맨드가 AdoptResult로 흡수되어 따로 히스토리에 올라가지 않는다.
UI 쪽에서는 TowerUndoButtonView가 CommandHistory의 OnChanged와 CanUndo를 구독해 버튼 활성 상태를 갱신하고, 클릭하면 CommandHistory.Undo()를 호출한다. 밤이 되면 CommandHistory.CommitAll()이 자동으로 실행되며 그날 쌓인 히스토리가 전부 확정된다.

타워 두개를 설치한다


타워를 선택해 게틀링 타워로 합성한다
위에 되돌리기 버튼을 누르면
기존 합성하기 전으로 돌아간다
SerializeReference
![[Unity] 튜토리얼 설계](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1787322579554-zopplu/_____2026-08-21_232731.png)
튜토리얼 설계
![[Unity] Event Trigger Component](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786976296699-a3tu75/_____2026-08-17_231353.png)
Unity Event Trigger 컴포넌트
![[Unity] 튜토리얼 설계](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1787322579554-zopplu/_____2026-08-21_232731.png)
![[Unity] Event Trigger Component](https://data.develog.develrocket.com/upload/develog/user_1777093328305/1786976296699-a3tu75/_____2026-08-17_231353.png)