- 개요
유닛을 설치할 수 있는 타일을 플레이어가 선택하면 시각화하도록 설계한다
- 스크립트 작업
1) TileAnimator 클래스

타일을 시각화하기 위한 TileAnimator 컴포넌트 클래스를 추가한다
멤버변수를 위와 같이 구성한다
- yMovementDuration 멤버변수 : 타일을 시각화하는 시간
- buildTileSlotOffset 멤버변수 : 타일을 시각화하기 위해 적용할 높이
- Instance 멤버변수 : TileAnimator의 싱글턴 인스턴스
- activeMoveTileCoroutines 멤버변수 : 타일 시각화를 수행하는 코루틴을 저장하여 중복 실행을 방지하는 딕셔너리
- targetTile 멤버변수 : 테스트용 멤버변수

Awake 함수를 추가하여 싱글톤 인스턴스를 저장한다

Get 함수들을 추가하여 시각화 시간과 높이 값을 반환한다

CoMoveTile 코루틴 함수를 추가하여 보간을 통해 타일을 위로 상승시킨다
딕셔너리 멤버변수를 활용하여 동일한 Transform에 대한 코루틴의 중복실행을 방지한다

MoveTile 함수를 호출하여 실질적으로 타일을 위로 상승시켜 시각화한다
동일하게 딕셔너리 멤버변수를 통해 코루틴의 중복실행을 방지한다

테스트용 TestMoveTile 함수를 추가한다
에디터에서 우클릭으로 함수를 호출하여 targetTile 변수에 지정한 타일을 상승시킨다
2) BuildManager 클래스

유닛 생성과 관련된 동작을 수행하는 BuildManger 클래스를 생성한다
멤버변수는 위와 같다
- Instance 멤버변수 : BuildManager 클래스의 싱글턴 인스턴스
- selectedBuildTile 멤버변수 : 선택한 타일의 BuildTileSlot 컴포넌트

Awake 함수를 구현하여 싱글턴 인스턴스의 값을 설정한다

SetSelectedBuildTile 함수를 호출하여 인자로 전달받은 선택한 타일을 멤버변수에 저장한다
3) BuildTileSlot 클래스

유닛을 생성할 수 있는 타일에 수식하는 BuildTileSlot 컴포넌트 클래스를 생성한다
멤버변수는 위와 같이 구성한다
- tileAnimator 멤버변수 : 타일에 수식된 TileAnimator 컴포넌트
- defaultPosition 멤버변수 : 타일의 원래 위치값
- bCanMove 멤버변수 : 타일을 시각화할 수 있는지(상승) 여부
- currentMoveUpCoroutine 멤버변수 : 현재 선택한 타일의 Transform을 대상으로 하는 CoMoveTile 코루틴

Awake 함수를 추가하여 defaultPosition 멤버변수의 값을 설정한다
또, 외부에서 InitTileAnimator 함수를 호출하여 tileAnimator 멤버변수의 값을 설정한다

MoveTileUp 함수를 추가하여 tileAnimator 변수로부터 MoveTile 함수를 호출하여 타일을 상승시킨다
이후 호출한 CoMoveTile 코루틴 함수를 currentMoveUpCoroutine 변수에 저장한다
MoveTileDown 함수를 추가하여 tileAnimator 변수의 MoveTile 함수를 호출하되 타일을 하강(복원)시킨다

UnSelectTile 함수를 추가하여 타일을 하강시키고 bCanMove 변수의 값을 True로 설정한다

IPointerEnterHandler + IPointerExitHandler + IPointerDownHandler 인터페이스를 상속관계에 추가하여
타일 오브젝트에 대한 마우스 커서의 진입 + 퇴장 + 클릭을 처리하도록 설정한다

OnPointerDown 함수를 위와 같이 오버라이드한다
마우스 커서의 클릭이 오른쪽 클릭인지 확인하고
SetSelectedBuildTile 함수에 클릭한 타일 오브젝트를 넘겨준다
이후 MoveTileUp 함수를 호출하여 클릭한 타일을 상승시키고 bCanMove의 값을 False로 변경한다

OnPointerEnter 함수를 위와 같이 오버라이드한다
마우스를 클릭하거나 타일을 상승시킬 수 없다면 얼리 리턴한다
이후 MoveTileUp 함수를 호출하여 커서가 진입한 타일을 상승시킨다

OnPointerExit 함수를 위와 같이 오버라이드한다
커서가 탈출한 타일 오브젝트에 대한 CoMoveTile 함수가 유효하다면,
일정시간 후에 MoveTileDown 함수를 호출하여 자연스럽게 타일을 하강시키고
유효하지 않다면, 즉시 타일을 하강시킨다
4) TileSlot 클래스

Start 함수를 추가하여 BuildTileSlot이 이미 설정된 타일들을 대상으로
InitTileAnimator 함수를 호출하여 TileAnimator를 설정한다

GetTileSetHolder 함수를 추가하여 부모 오브젝트의 TileSetHolder 컴포넌트를 가져온다

ChangeToBuildTileSlot 함수를 추가하여 위와 같이 구현한다
선택한 타일이 유닛을 생성할 수 있는 Field 타일인 경우에만 BuildTileSlot 컴포넌트를 추가하고
추가한 컴포넌트로부터 InitTileAnimator 함수를 호출하여 TileAnimator 변수를 설정한다

SwitchTile 함수에 위의 로직을 추가하여
변경된 타일이 Field 타일인 경우 BuildTileSlot 컴포넌트를 추가한다
- 최종 실행 결과

'유니티 엔진 - 게임 프로젝트 > 타워 디펜스 게임' 카테고리의 다른 글
| 유닛 설치 - 2) 유닛 생성 (0) | 2026.07.21 |
|---|---|
| UI - 최종) 유닛 생성 버튼 개선과 일시정지 UI (0) | 2026.07.15 |
| UI - 4) UI 애니메이션 구현 (2) (0) | 2026.07.13 |
| UI - 3) UI 애니메이션 구현 (1) (0) | 2026.07.07 |
| UI - 2) 인게임 UI 구성 (0) | 2026.07.06 |