본문 바로가기
유니티

[유니티] #6 광부 타이쿤 게임 만들기 (싱글톤, 골드매니저)

by 디버그러 2025. 1. 17.

 

새로운 스크립트 GoldManager를 만들고 변수를 선언한다.

readonly는 읽기 전용이라는 뜻으로 초기화된 값을 변경할 수는 없지만 읽어올 수는 있다.

 

비슷한 개념으로 const는 컴파일 타임에 값을 초기화하고 readonly는 런타임에 값을 초기화할 수 있다.

 

 

 

CurrentGold를 +, - 하는 함수를 추가한다.

PlayerPrefs는 픽셀 2D Run 게임 만들기에서도 사용했던 클래스다.

플레이어의 디바이스에 게임 데이터를 저장하고 로드할 수 있다.

 

보안이 취약하기 때문에 대규모 데이터나 중요한 데이터를 저장하는 데에는 부적합하지만

사용하는 방법이 간편하기에 여기서는 일단 쓰기로 한다.

 

 

 

SetInt를 통해 저장한 값을 GetInt로 가져오고 Start 메서드에서 호출한다.

 

 

 

싱글톤 패턴을 사용해 인스턴스를 만든다.

이 패턴을 사용하면 게임 내 어디서든 전역적으로 접근할 수 있다.

또한 클래스에 인스턴스가 하나기 때문에 데이터 충돌을 방지할 수 있다.

 

 

 

싱글톤과 비슷한 정적 클래스와의 차이점이다.

싱글톤은 각종 Manager 스크립트에 쓰이고, 정적 클래스는 유틸리티 함수를 구현하는 데에 쓰인다.

 

 

 

BaseUpgrade 스크립트에서 인스턴스를 이용해 업그레이드시 골드를 제거한다.

 

 

 

CurrentLevel이 10이 될 때마다 광부를 생성하도록 로직을 추가한다.

CreateMiner 함수를 public으로 바꿔야 호출할 수 있다.

 

 

 

새로운 광부가 생성되면 foreach문에서 업그레이드를 받지 못한 상태로 생성된다.

기존 광부와 수집량과 이동속도가 동일하도록 한다.

 

 

 

Button을 복사하여 새로운 Shaft를 생성하는 버튼을 만든다.

Character의 값이 작아질수록 문자 사이에 공백이 줄어든다.

 

 

 

새 폴더를 만들어 스크립트를 분류한다.

스크립트의 양이 많아질수록 찾기 힘들어지니 분류해두는 편이 좋다.

 

 

 

새로운 ShaftManager 스크립트를 만든다.

변수를 선언하고 Shaft 목록을 넣을 List도 선언한다.

 

AddShaft 함수를 만들어 첫 번째 shaft의 위치를 저장한다.

shaft를 만들 때 새로운 위치를 기존 shaft를 기준으로 설정한다.

 

 

 

Shaft 업그레이드 비용을 사용하기 위해 ShaftManager 스크립트에서 프로퍼티를 추가한다.

ShaftUI 스크립트에서 BuyNewShaft 함수를 만들어 현재 골드가 업그레이드 비용보다 클 경우

가진 골드를 삭제하고 새로운 Shaft가 추가되도록 한다.

 

 

 

Create Empty로 ShaftManager를 만들고 스크립트를 넣는다.

스크립트에 Shaft를 연결하고 Shaft를 프리팹으로 만든다.

 

 

 

Shaft를 복사해서 적당한 Y Position 값을 찾는다.

새로운 Shaft가 생성될 때 1번 째 Shaft에서 그 값을 뺀 Y축 자리에 생성된다.

 

 

 

AddShaft 버튼의 클릭 이벤트를 ShaftManager 스크립트의 AddShaft로 지정한다.

Shaft 프리팹의 내용이 바뀌었으니 Overrides 버튼을 눌러 Apply All을 하면

씬에 배치된 프리팹과 프로젝트에 있는 프리팹의 내용이 똑같아진다.

 

 

 

buyNewShaftButton 변수를 만들고 새로운 Shaft가 생성되면 버튼이 비활성화되도록 한다.

 

 

 

강의 출처: #17 Add more Shafts (Unity Tutorial | Tycoon idle game)