> For the complete documentation index, see [llms.txt](/llms.txt)

# Experience(GS2 UIKit for Unity) 샘플

GS2 UIKit for Unity를 사용한 GS2-Experience 기능 구현 샘플 소개



경험치·레벨 기능을 구현합니다.

## 저장소

https://github.com/gs2io/gs2-uikit-for-unity-sample/tree/main/Experience

## GS2-Deploy 템플릿

https://github.com/gs2io/gs2-uikit-for-unity-sample/blob/main/Experience/initialize_experience_template.yaml

## 프로젝트 내용

![img.png](img.png)

프로젝트를 열면 위와 같이 됩니다.

![img_1.png](img_1.png)

실행하면 이와 같이 현재 레벨과 레벨 캡, 진행률 바가 표시됩니다.

![img_2.png](img_2.png)

화면 하단에 경험치 조작 버튼이 준비되어 있습니다.

"Add Experience(100)"으로 경험치를 100 추가해 봅시다.

![img_3.png](img_3.png)

경험치가 추가되어 레벨이 1에서 3으로 올랐습니다.

다시 한 번 "Add Experience(100)"으로 경험치를 100 추가해 봅시다.

![img_4.png](img_4.png)

레벨이 5로 올라 레벨 캡에 도달했습니다.
이 상태를 알기 쉽게 하기 위해, 레벨 값 표기가 검은색에서 빨간색으로 바뀌어 있습니다.

"Add Rank Cap"을 눌러 레벨 캡 인상을 실행해 봅시다.

![img_5.png](img_5.png)

레벨 캡이 5에서 6으로 인상되었습니다.
그 결과 현재 레벨이 레벨 캡에 도달하지 않은 상태가 되었으므로, 레벨 표기도 빨간색에서 검은색으로 돌아왔습니다.

## 프로젝트 해설

![img_6.png](img_6.png)

씬의 계층 구조(Hierarchy)에 주목해 주십시오.

### Canvas/ExperienceWindow

![img_7.png](img_7.png)

**Gs2ExperienceExperienceModelContext**

이 GameObject 아래의 노드에서 다루는 경험치 모델을 지정하고 있습니다.

![img_9.png](img_9.png)
![img_8.png](img_8.png)

이번에는 GS2-Experience의 experience-0001이라는 네임스페이스의, Experience라는 경험치 모델을 지정하고 있습니다.

**Gs2ExperienceOwnStatusContext**

이 GameObject 아래의 노드에서 다루는 자신의 스테이터스를 지정하고 있습니다.

![img_11.png](img_11.png)
![img_10.png](img_10.png)

이번에는 GS2-Experience의 experience-0001이라는 네임스페이스의, Experience라는 경험치 모델, player라는 프로퍼티ID를 지정하고 있습니다.

**Gs2ExperienceOwnStatusFetcher**

Gs2ExperienceOwnStatusContext에서 지정한 스테이터스를 취득합니다.

### Canvas/ExperienceWindow/Experience/.../RankValue

![img_12.png](img_12.png)

**Gs2ExperienceStatusEnabler**

스테이터스의 로딩 상황에 따라 ValueContainer / Slider를 활성화·비활성화하고 있습니다.

### Canvas/ExperienceWindow/Experience/.../RankValue/ValueContainer

![img_13.png](img_13.png)

**Gs2ExperienceStatusRankValueEnabler**

스테이터스의 랭크가 최대값에 도달했는지 여부에 따라 Value / ReachMaxValue를 활성화·비활성화하고 있습니다.

### Canvas/ExperienceWindow/Experience/.../RankValue/ValueContainer/Value

![img_14.png](img_14.png)

**Gs2ExperienceOwnStatusLabel**

현재 랭크 값이나 랭크 캡 값을 Format으로 지정한 형식으로 정형하고 있습니다.
정형한 결과는 OnUpdate(String)으로 콜백되므로, Text 컴포넌트에 반영하고 있습니다.
이 Text 컴포넌트는 텍스트 색상으로 검은색을 지정하고 있습니다.

### Canvas/ExperienceWindow/Experience/.../RankValue/ValueContainer/ReachMaxValue

![img_14.png](img_14.png)

**Gs2ExperienceOwnStatusLabel**

현재 랭크 값이나 랭크 캡 값을 Format으로 지정한 형식으로 정형하고 있습니다.
정형한 결과는 OnUpdate(String)으로 콜백되므로, Text 컴포넌트에 반영하고 있습니다.
이 Text 컴포넌트는 텍스트 색상으로 빨간색을 지정하고 있습니다.

### Canvas/ExperienceWindow/Experience/.../Slider

![img_15.png](img_15.png)

**Gs2ExperienceStatusProgress**

현재 랭크에서 다음 랭크업까지 필요한 경험치에 도달하기까지의 진행률을 0.0~1.0으로 OnUpdate(Single)의 콜백으로 반환합니다.
Slider.value에 값으로 반영하고 있습니다.

### Canvas/ExperienceWindow/Input/AddExperience

**Gs2ExchangeRateModelContext**

경험치를 10 추가하는 GS2-Exchange의 교환 비율을 설정합니다.

![img_19.png](img_19.png)
![img_18.png](img_18.png)

여기서는 GS2-Exchange의 exchange-0006이라는 이름의 네임스페이스의 AddExperience라는 이름의 교환 비율을 지정하고 있습니다.

### Canvas/ExperienceWindow/Input/AddExperience/Gs2ExchangeExchangeExchangeAction

![img_16.png](img_16.png)

이 컨텍스트 메뉴에서 프리팹을 추가할 수 있습니다.

![img_17.png](img_17.png)

Count에 교환 수량을 지정하고, 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext에서 지정한 교환 비율의 교환을 실행합니다.

**OnExchangeComplete(String)**

에 교환 처리가 정상적으로 종료된 경우의 콜백을 설정할 수 있으며, 자기 자신을 비활성화하고 있습니다.

### Canvas/ExperienceWindow/Input/AddExperienceX10

**Canvas/ExperienceWindow/Input/AddExperience**
와 마찬가지로, 경험치를 10 추가하는 GS2-Exchange의 교환 비율을 설정합니다.

### Canvas/ExperienceWindow/Input/AddExperienceX10/Gs2ExchangeExchangeExchangeAction

교환 수량으로 10이 설정되어 있습니다.

### Canvas/ExperienceWindow/Input/AddRankCap

랭크 캡을 1 추가하는 GS2-Exchange의 교환 비율을 설정합니다.

### Process/Gs2AutoLogin

로그인 처리를 실행하는 프리팹이 설정되어 있습니다.

[Account 샘플]()에서 설명하고 있으므로, 그쪽을 참조해 주십시오.




