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

# Dictionary(GS2 UIKit for Unity) 샘플

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



도감 기능을 구현합니다.

## 리포지토리

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

## GS2-Deploy 템플릿

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

## 프로젝트 내용

![img.png](img.png)

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

![img_1.png](img_1.png)

실행하면 A~E 까지 5체의 캐릭터 입수 상황이 표시됩니다.
지금은 어떤 캐릭터도 입수하지 않았기 때문에, 전부 그레이아웃되어 있습니다.

![img_2.png](img_2.png)

화면 하단에 각 캐릭터를 입수하는 버튼을 배치하고 있습니다.
우선, "A" 버튼을 눌러 봅시다.

![img_3.png](img_3.png)

"A" 캐릭터를 입수함으로써 컬러 표시가 되고, 입수 시간이 표시됩니다.
마찬가지로 "C" 버튼을 눌러 봅시다.

![img_4.png](img_4.png)

"C" 캐릭터도 컬러 표시가 됩니다.

## 프로젝트 해설

![img_5.png](img_5.png)

씬의 계층 구조에 주목해 주세요.

### Canvas/DictionaryWindow

![img_6.png](img_6.png)

**Gs2DictionaryNamespaceContext**

이 GameObject 이하의 노드에서 다룰 네임스페이스를 지정하고 있습니다.

![img_7.png](img_7.png)

이번에는 dictionary-0001 을 지정하고 있습니다.

### Canvas/DictionaryWindow/Dictionary/.../Content

![img_8.png](img_8.png)

**Gs2DictionaryEntryModelListFetcher**

NamespaceContext 에서 지정된 네임스페이스의 엔트리 모델 목록을 취득합니다.

**Gs2DictionaryEntryModelList**

Gs2DictionaryEntryModelListFetcher 로 취득한 엔트리 모델을 지정된 프리팹에 할당하여 생성합니다.
Maximum Items 에는 프리팹을 생성할 최대 개수를 지정합니다.

![img_9.png](img_9.png)

이번에는 자식 노드에 있는 Entry 를 프리팹으로 지정하고 있습니다.
프리팹으로 지정된 GameObject 가 씬 내에 있는 경우, 해당 GameObject 는 비활성화되고, 그 외에 Maximum Items 로 지정된 수만큼 GameObject 가 생성됩니다.

### Canvas/DictionaryWindow/Dictionary/.../Content/Entry

![img_10.png](img_10.png)

**Gs2DictionaryEntryModelContext**

이 GameObject 이하의 노드에서 다룰 엔트리를 지정하고 있습니다.
컨텍스트의 내용은 Gs2DictionaryEntryModelList 에 의해 할당됩니다.

**Gs2DictionaryEntryModelFetcher**

Gs2DictionaryEntryModelContext 에서 지정된 엔트리의 모델을 취득합니다.

**Gs2DictionaryOwnEntryFetcher**

Gs2DictionaryEntryModelContext 에서 지정된 엔트리 모델의 자신의 엔트리를 취득합니다.

**Gs2DictionaryEntryEnabler**

Entry 의 로드 상태에 따라 입수 일시를 표시하는 GameObject 를 활성화합니다.
엔트리를 입수하지 않은 경우에는 Loaded 상태가 되지 않으므로, 입수한 경우에만 활성화됩니다.

**Gs2DictionaryEntryModelEnabler**

EntryModel 의 로드 상황에 따라 엔트리의 이름을 표시하는 GameObject 를 활성화합니다.

### Canvas/DictionaryWindow/Dictionary/.../Content/Entry/Icon

캐릭터의 아이콘 이미지를 표시합니다.
단, 목록에 표시하는 엔트리에 따라 표시할 이미지의 종류가 달라져야 합니다.

![img_11.png](img_11.png)

**Gs2DictionaryEntryModelNameEnabler**

Gs2DictionaryEntryModelFetcher 로 취득한 엔트리 모델의 이름에 따라 GameObject 를 활성화·비활성화합니다.
샘플에서는 5개를 배치하여 "A"~"E" 중 해당하는 엔트리의 노드만 활성화되도록 설정되어 있습니다.

### Canvas/DictionaryWindow/Dictionary/.../Content/Entry/Icon/A

"A"~"E" 의 GameObject 가 설정되어 있지만, 원칙적으로 동일한 구성을 취하고 있습니다.

![img_12.png](img_12.png)

입수 일시를 표시하는 부분과 마찬가지로 분기하여, 입수 완료된 경우에는 Active 를 활성화하고, 미입수인 경우에는 Disabled 를 활성화하고 있습니다.

#### Canvas/DictionaryWindow/Dictionary/.../Content/Entry/Icon/A/Active

![img_13.png](img_13.png)

#### Canvas/DictionaryWindow/Dictionary/.../Content/Entry/Icon/A/Disabled

![img_14.png](img_14.png)

Disabled 에서는 Material 에 GrayScaleMaterial 을 지정함으로써 셰이더를 사용하여 그레이아웃시키고 있습니다.

### Canvas/DictionaryWindow/Dictionary/.../Content/Entry/Name

엔트리 모델의 이름을 표시합니다.

![img_15.png](img_15.png)

**Gs2DictionaryEntryModelLabel**

엔트리 모델의 내용을 Format 에서 지정한 형식으로 정형합니다.
정형된 텍스트는 OnUpdate(String) 으로 콜백되어, 거기서 Text 컴포넌트에 값을 반영하고 있습니다.

### Canvas/DictionaryWindow/Dictionary/.../Content/Entry/AcquiredAt

엔트리의 입수 일시를 표시합니다.

**Gs2DictionaryOwnEntryLabel**

엔트리의 내용을 Format 에서 지정한 형식으로 정형합니다.
정형된 텍스트는 OnUpdate(String) 으로 콜백되어, 거기서 Text 컴포넌트에 값을 반영하고 있습니다.

![img_16.png](img_16.png)

### Canvas/DictionaryWindow/Input/Acquire A

![img_17.png](img_17.png)

**Gs2ExchangeRateModelContext**

엔트리를 입수 완료 상태로 만드는 GS2-Exchange 의 교환 레이트를 설정합니다.

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

여기서는 GS2-Exchange 의 exchange-0004 네임스페이스에 있는 A 레이트 모델을 교환하도록 설정하고 있습니다.

### Canvas/DictionaryWindow/Input/Acquire A/Gs2ExchangeExchangeExchangeAction

![img_20.png](img_20.png)

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

![img_21.png](img_21.png)

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

**OnExchangeComplete(String)**

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

### Process/Gs2AutoLogin

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

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




