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

# Inbox(GS2 UIKit for Unity) 샘플

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



프레젠트 박스 기능을 구현합니다.

## 리포지토리

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

## GS2-Deploy 템플릿

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

## 프로젝트 내용

![img.png](img.png)

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

![img_1.png](img_1.png)

실행하면 상단에는 아무것도 없고 하단에 메뉴가 표시되는 화면이 나타납니다.

![img_2.png](img_2.png)

메뉴에서 "Send" 버튼을 3번 눌러 봅니다.

![img_3.png](img_3.png)

3통의 메시지가 목록으로 표시됩니다.
이처럼 화면 상단에는 프레젠트 박스에 도착한 메시지 목록이 표시됩니다.

![img_2.png](img_2.png)

이번에는 메뉴에서 "Send With Expire" 버튼을 눌러 봅니다.

![img_4.png](img_4.png)

메시지 목록에 새로 유효기간이 설정된 메시지 목록이 표시됩니다.
일시 표기가 두 줄로 표시되는데, 위쪽이 수신 일시이고 아래쪽이 유효기간입니다.
유효기간은 수신 일시로부터 1분 후로 설정되어 있습니다.

이대로 1분간 기다려 주세요.

![img_5.png](img_5.png)

유효기간이 지난 메시지는 자동으로 표시되지 않게 됩니다.

다음으로, 3통 중 가운데에 있는 메시지의 "Read" 버튼을 눌러 봅니다.

![img_6.png](img_6.png)

이미 읽은 메시지는 Read 버튼이 회색으로 비활성화됩니다.

## 프로젝트 해설

![img_7.png](img_7.png)

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

### Canvas/InboxWindow

**Gs2InboxNamespaceContext**

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

![img_8.png](img_8.png)

이번에는 GS2-Inbox의 inbox-0001이라는 네임스페이스를 지정하고 있습니다.

### Canvas/InboxWindow/Inbox/.../Content

![img_9.png](img_9.png)

**Gs2InboxOwnMessageListFetcher**

NamespaceContext에서 지정된 네임스페이스의 메시지 목록을 취득합니다.

**Gs2InboxOwnMessageList**

Gs2InboxOwnMessageListFetcher에서 취득한 메시지를 지정된 프리팹에 할당하여 생성합니다.
Maximum Items에는 프리팹을 생성할 최대 개수를 지정합니다.

![img_10.png](img_10.png)

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

### Canvas/InboxWindow/Inbox/.../Content/Message

![img_11.png](img_11.png)

**Gs2InboxOwnMessageContext**

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

**Gs2InboxOwnMessageFetcher**

Gs2InboxOwnMessageContext에서 지정된 메시지를 취득합니다.

### Canvas/InboxWindow/Inbox/.../Content/Message/Metadata

메시지의 페이로드를 표시합니다.

![img_12.png](img_12.png)

**Gs2InboxOwnMessageLabel**

메시지의 내용을 Format에서 지정한 형식으로 정형화합니다.
정형화된 텍스트는 OnUpdate(String)로 콜백되며, 여기서 Text 컴포넌트에 값을 반영합니다.

### Canvas/InboxWindow/Inbox/.../Content/Message/Timestamp

![img_13.png](img_13.png)

**Gs2InboxOwnMessageExpiresAtEnabler**

메시지에 설정된 유효기간 값을 기반으로 표시·비표시를 제어합니다.
유효기간이 설정되어 있는 경우 ExpiresAt이 활성화되도록 설정되어 있습니다.

### Canvas/InboxWindow/Inbox/.../Content/Message/Timestamp/ReceivedAt

**Gs2InboxOwnMessageLabel**

![img_14.png](img_14.png)

메시지의 수신 일시를 표시하고 있습니다. 정형화 방식은 Format으로 지정하며,
정형화된 텍스트는 OnUpdate(String)로 콜백되며, 여기서 Text 컴포넌트에 값을 반영합니다.

### Canvas/InboxWindow/Inbox/.../Content/Message/Timestamp/ExpiresAt

**Gs2InboxOwnMessageLabel**

![img_14.png](img_14.png)

메시지의 유효기간을 표시하고 있습니다. 정형화 방식은 Format으로 지정하며,
정형화된 텍스트는 OnUpdate(String)로 콜백되며, 여기서 Text 컴포넌트에 값을 반영합니다.

### Canvas/InboxWindow/Inbox/.../Content/Message/Control

![img_15.png](img_15.png)

**Gs2InboxOwnMessageIsReadEnabler**

메시지의 읽음 상태 값을 기반으로 표시·비표시를 제어합니다.
미읽음 상태인 경우 Read를 활성화하고, 읽음 상태인 경우 AlreadyRead를 활성화합니다.

### Canvas/InboxWindow/Inbox/.../Content/Message/Control/Gs2InboxMessageReadAction

![img_16.png](img_16.png)

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

![img_17.png](img_17.png)

프리팹을 활성화함으로써 Gs2InboxOwnMessageContext에서 지정한 메시지를 읽음 상태로 만듭니다.

**OnReadComplete(String)**

에 읽음 처리가 정상적으로 완료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화합니다.

### Canvas/InboxWindow/Input/Send

![img_18.png](img_18.png)

**Gs2ExchangeRateModelContext**

GS2-Inbox의 메시지를 전송하는 GS2-Exchange의 교환 레이트를 설정합니다.

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

여기서는 GS2-Exchange의 exchange-0002라는 이름의 네임스페이스에 있는 SendMessage라는 이름의 교환 레이트를 지정하고 있습니다.

### Canvas/ExperienceWindow/Input/Send/Gs2ExchangeExchangeExchangeAction

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

**OnExchangeComplete(String)**

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

### Canvas/InboxWindow/Input/Send With Expire

![img_21.png](img_21.png)

**Gs2ExchangeRateModelContext**

GS2-Inbox의 유효기간이 있는 메시지를 전송하는 GS2-Exchange의 교환 레이트를 설정합니다.

여기서는 GS2-Exchange의 exchange-0002라는 이름의 네임스페이스에 있는 SendMessageWithExpire라는 이름의 교환 레이트를 지정하고 있습니다.

### Canvas/ExperienceWindow/Input/Send With Expire/Gs2ExchangeExchangeExchangeAction

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

**OnExchangeComplete(String)**

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

### Process/Gs2AutoLogin

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

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




