Inbox(GS2 UIKit for Unity) 샘플
프레젠트 박스 기능을 구현합니다.
리포지토리
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
프로젝트 내용

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

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

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

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

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

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

유효기간이 지난 메시지는 자동으로 표시되지 않게 됩니다.
다음으로, 3통 중 가운데에 있는 메시지의 “Read” 버튼을 눌러 봅니다.

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

씬의 계층 구조(Hierarchy)에 주목해 주세요.
Canvas/InboxWindow
Gs2InboxNamespaceContext
이 GameObject 이하의 노드에서 다룰 GS2-Inbox의 네임스페이스를 지정하고 있습니다.

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

Gs2InboxOwnMessageListFetcher
NamespaceContext에서 지정된 네임스페이스의 메시지 목록을 취득합니다.
Gs2InboxOwnMessageList
Gs2InboxOwnMessageListFetcher에서 취득한 메시지를 지정된 프리팹에 할당하여 생성합니다. Maximum Items에는 프리팹을 생성할 최대 개수를 지정합니다.

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

Gs2InboxOwnMessageContext
이 GameObject 이하의 노드에서 다룰 메시지를 지정하고 있습니다. 컨텍스트의 내용은 Gs2InboxOwnMessageList에 의해 할당됩니다.
Gs2InboxOwnMessageFetcher
Gs2InboxOwnMessageContext에서 지정된 메시지를 취득합니다.
Canvas/InboxWindow/Inbox/…/Content/Message/Metadata
메시지의 페이로드를 표시합니다.

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

Gs2InboxOwnMessageExpiresAtEnabler
메시지에 설정된 유효기간 값을 기반으로 표시·비표시를 제어합니다. 유효기간이 설정되어 있는 경우 ExpiresAt이 활성화되도록 설정되어 있습니다.
Canvas/InboxWindow/Inbox/…/Content/Message/Timestamp/ReceivedAt
Gs2InboxOwnMessageLabel

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

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

Gs2InboxOwnMessageIsReadEnabler
메시지의 읽음 상태 값을 기반으로 표시·비표시를 제어합니다. 미읽음 상태인 경우 Read를 활성화하고, 읽음 상태인 경우 AlreadyRead를 활성화합니다.
Canvas/InboxWindow/Inbox/…/Content/Message/Control/Gs2InboxMessageReadAction

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

프리팹을 활성화함으로써 Gs2InboxOwnMessageContext에서 지정한 메시지를 읽음 상태로 만듭니다.
OnReadComplete(String)
에 읽음 처리가 정상적으로 완료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화합니다.
Canvas/InboxWindow/Input/Send

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

여기서는 GS2-Exchange의 exchange-0002라는 이름의 네임스페이스에 있는 SendMessage라는 이름의 교환 레이트를 지정하고 있습니다.
Canvas/ExperienceWindow/Input/Send/Gs2ExchangeExchangeExchangeAction
Count에 교환 수량을 지정하고, 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext에서 지정한 교환 레이트의 교환을 실행합니다.
OnExchangeComplete(String)
에 교환 처리가 정상적으로 완료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화합니다.
Canvas/InboxWindow/Input/Send With Expire

Gs2ExchangeRateModelContext
GS2-Inbox의 유효기간이 있는 메시지를 전송하는 GS2-Exchange의 교환 레이트를 설정합니다.
여기서는 GS2-Exchange의 exchange-0002라는 이름의 네임스페이스에 있는 SendMessageWithExpire라는 이름의 교환 레이트를 지정하고 있습니다.
Canvas/ExperienceWindow/Input/Send With Expire/Gs2ExchangeExchangeExchangeAction
Count에 교환 수량을 지정하고, 프리팹을 활성화함으로써 Gs2ExchangeRateModelContext에서 지정한 교환 레이트의 교환을 실행합니다.
OnExchangeComplete(String)
에 교환 처리가 정상적으로 완료되었을 때의 콜백을 설정할 수 있으며, 자기 자신을 비활성화합니다.
Process/Gs2AutoLogin
로그인 처리를 실행하는 프리팹이 설정되어 있습니다.
Account 샘플에서 설명하고 있으니 그쪽을 참조해 주세요.