Skinning Editor에서 뼈를 만들어서 Sprite Skin 컴포넌트를 추가했다.
Depth를 입력하여 렌더링 순서도 맞춰야 한다.
Idle 애니메이션을 만들어서 머리와 손 또는 발을 움직이도록 했다
광부 3명을 만들 때 반복했던 작업이라 손쉽게 할 수 있다.
Elevator 오브젝트 안에 Sprite Mask를 추가한다.
이름은 ElevatorWindowMask로 변경했는데 빈 오브젝트에 Sprite Mask 컴포넌트만 추가해도 된다.
컴포넌트의 Sprite로 ElevatorMask를 넣는다.
Rosa 매니저의 Mask Interaction을 None → Visible Inside Mask로 변경한다.
Mask Interaction을 사용하면 특정 영역(안개, 동굴, 그림자) 안에서만 스프라이트를 보이게 하거나 숨길 수 있다.
2D 게임에서 자주 사용되는 기능이며 투명 텍스처 없이도 사용할 수 있어 효율적이다.
대신 Sprite Mask를 추가로 설정해야 한다는 번거로움과, 너무 Mask가 많으면 성능 저하가 발생한다는 단점이 있다.
스크립트 폴더에 Location 폴더를 새로 만들었다.
그 안에 BaseManagerLocation 스크립트를 만들고 Manager 프로퍼티를 선언한다.
RunBoost 함수는 Virtual로 만들어 자식 스크립트에서 변경할 수 있도록 한다.
ElevatorManagerLocation 스크립트를 만들어서 Elevator 오브젝트에 추가한다.
MineManager 스크립트를 만들어서 3명의 매니저 오브젝트에 모두 추가한다.
MineManager는 위치값(엘리베이터, 창고, 샤프트)을 가지고 있기에
다른 스크립트에서 접근하기 위해 Location 프로퍼티를 추가한다.
ManagerController 스크립트에 CurrentManagerLocation 프로퍼티를 추가한다.
매니저가 일하는 위치에 대한 참조값이다.
Camera 클래스 변수도 추가하고 Start 메서드에서 초기화 한다.
physics.Raycast는 광선을 쏴서 충돌한 오브젝트를 감지하는 함수다.
out RaycastHit는 광선이 충돌한 오브젝트의 정보(위치, 노멀 벡터, 거리, 콜라이더 정보 등)를 저장하는 구조체다.
out 키워드가 붙어 있으므로 함수 내부에서 값을 할당받고, 함수 종료 후에도 값을 유지할 수 있다.
이전 게시글에서 만든 매니저 패널을 참조하기 위해 변수를 선언한다.
OpenPanel 함수를 만들고 value를 받아서 ManagerPanel을 열거나 닫는다.
ElevatorManagerLocation은 BaseManagerLocation을 상속한다.
부모 스크립트에는 Manager 클래스 변수와 빈 virtual 함수가 있는 상태다.
ElevatorManagerLocaiton은 Base 스크립트를 상속받았기 때문에 MineManager에서 참조할 수 있다.
Elevator 오브젝트 안에 ElevatorManagerLocation 스크립트가 있기 때문에 Elevator 오브젝트를 참조로 넣었다.
또한 매니저에 Box Collider 컴포넌트를 추가하고 콜라이더를 크기에 맞게 키웠다.
Box Collider 2D가 아닌 이유는 Raycast 함수는 기본적으로 3D 기반이기 때문이다.
2D 컴포넌트를 추가하면 작동하지 않는다.
Debug 모드로 보면 CurrentManagerLocation 변수가 Elevator로 잘 설정된 걸 볼 수 있다.
Manager UI 변수를 추가하고 인스펙터에서 드래그하여 참조한다.
ManagersController 스크립트가 SingleTon을 상속받도록 한다.
이제 ManagerCard 스크립트에서 AssignManager 함수를 만들고,
인스턴스를 이용해 현재 ManagerLocation을 가져올 수 있다.
location 값을 MineManager → ManagersController (RayCast 함수) → ManagerCard 순서로 참조했다.
_assignedManager를 List로 선언하고 Start 메서드에서 초기화한다.
전에 만든 managerList 변수는 사용 가능한 매니저 목록에서 매니저 정보를 가져오고 삭제한다면,
_assignedManagerCards는 현재 고용된 매니저의 목록을 가져오는 것이다.
이제 고용되거나 고용되지 않은 매니저 모두 ManagerController 스크립트에서 참조하고 있다.
AddAssginedManagerCard 함수를 선언하고 파라미터로 ManagerCard를 받는다.
받은 카드를 리스트에 저장하면 현재 고용된 매니저를 알 수 있다.
ManagerCard 스크립트에서 SetManagerInfoToManagerLocation 함수를 추가하고,
매니저가 배치되지 않았다면 현재 매니저를 배치하여 정보를 업데이트하고, 배치한 카드를 UI에서 비활성화 한다.
강의 출처: #45 Assign Manager (Unity Tutorial | Tycoon idle game)
'유니티' 카테고리의 다른 글
[유니티] #17 광부 타이쿤 게임 만들기 (샤프트 매니저 부스트) (0) | 2025.02.08 |
---|---|
[유니티] #16 광부 타이쿤 게임 만들기 (부스트) (0) | 2025.02.07 |
[유니티] #14 광부 타이쿤 게임 만들기 (매니저 카드, Scriptable) (0) | 2025.02.02 |
[유니티] #13 광부 타이쿤 게임 만들기 (창고 업그레이드, 매니저 UI) (0) | 2025.02.01 |
[유니티] #12 광부 타이쿤 게임 만들기 (엘리베이터 업그레이드) (0) | 2025.01.26 |