- 印刷する
- PDF
Game Chat Unity SDK
- 印刷する
- PDF
Classic/VPC環境で利用できます。
Game Chat Unity SDKの使い方について説明します。
システム要件
Game Chat Unity SDKを使用するためのシステム要件は、以下のとおりです。
- 最小スペック: 2018.4.0以上
(下位バージョンの Unityへの対応が必要な場合、お問い合わせチャネルまでご連絡ください。) - 2019.4.X / 2020.3.X / 2021.1.Xバージョンの Unityエディタのユーザーは、2019.4.29f1以上 / 2020.3.15f2以上 / 2021.1.16f1以上のバージョンを使用します(AABバージョンビルド時の Unityエディタのバグが変更されたバージョン)
SDKのインストールと環境の構成
Game Chat Unity SDKをダウンロードして、Unityでプロジェクトを構成する方法は以下のとおりです。
- NAVERクラウドプラットフォームコンソールで、Services > Gaming > Game Chatメニューを順にクリックします。
- プロジェクトの管理ページ URLをクリックしてダッシュボードにログインします。
- 設定 > SDKのダウンロードメニューを順にクリックし、Unity SDKのダウンロードをクリックします。
- Unityプログラムを実行し、プロジェクトを作成します。
- Unityで、Assets > Import Package > Custom Package...メニューを順にクリックします。
- ダッシュボードでダウンロードした「GameChatUnitySDK_xxxxxxxx」ファイルを読み込みます。
- パッケージにあるすべてのファイルを選択し、 [Import] ボタンをクリックします。
- プロジェクトを保存します。
認証
Game Chatインスタンスの初期化
Game Chatプロジェクト IDを用いて Game Chatインスタンスを初期化するには、以下のコードを使用します。
GameChat.initialize(PROJECT_ID);
// シンガポールリージョンを使用する場合
GameChat.setRegion("sg");
GameChat.initialize(PROJECT_ID);
ID | type | desc |
---|---|---|
PROJECT_ID | string | プロジェクト ID |
Game Chatソケットサーバとの接続
Game Chatソケットサーバに接続する方法は以下のとおりです。
- チャットユーザー IDを用いてGame Chatソケットサーバにアクセスします。
- Game Chatプロジェクトでチャットユーザー IDは固有の値です。
- APIを使用するためのトークンの値を取得します。
- GameChat.connect以降に更新されたトークンの値を確認できます。
- トークンの値を取得した後、現在アクセス中のデバイスに対するチャットユーザー情報が更新されたのか確認します。
- GameChat.connectのコールバックで渡される Memberは、更新されたデータです。
Game Chatソケットサーバに接続するには、以下のコードを使用します。
GameChat.connect(USER_ID, (Member User, GameChatException Exception)=>
{
if(Exception != null)
{
// エラー処理
return;
}
});
ID | type | desc |
---|---|---|
USER_ID | string | チャットユーザーの固有 ID |
Game Chatサーバとの接続解除
Game Chatソケットサーバとの接続を解除するには、以下のコードを使用します。
GameChat.disconnect();
チャットユーザー情報のアップデート
connect成功後にチャットユーザー情報を保存してアップデートするには、以下のコードを使用します。
ハンドルネームの変更
GameChat.setNickname(USER_ID, NickName, (member, exception) =>
{
if (exception != null)
{
// エラー処理
return;
}
});
ID | type | desc |
---|---|---|
USER_ID | string | チャットユーザーの固有 ID |
NickName | string | チャットユーザーのハンドルネーム |
Profile URLの変更
GameChat.setProfileUrl(USER_ID, ProfileUrl, (member, exception) =>
{
if (exception != null)
{
// エラー処理
return;
}
});
ID | type | desc |
---|---|---|
USER_ID | string | チャットユーザーの固有 ID |
ProfileUrl | string | チャットユーザーの ProfileURL |
チャンネルの購読と購読解除
特定のチャンネルに対して購読または購読解除を行うには、以下のコードを使用します。
GameChat.subscribe(CHANNEL_ID);
GameChat.unsubscribe(CHANNEL_ID);
ID | type | desc |
---|---|---|
CHANNEL_ID | string | チャンネル ID |
メッセージの送信
特定のチャンネルにメッセージを送信するには、以下のコードを使用します。
GameChat.sendMessage(CHANNEL_ID, MESSAGE);
ID | type | desc |
---|---|---|
CHANNEL_ID | string | チャンネル ID |
MESSAGE | string | 送信メッセージテキスト |
MESSAGEパラメータに@[ユーザー ID]空白[メッセージ内容]を入力時
@user_idメッセージ本文
上記のケースでユーザー IDがログインした履歴がある場合、メッセージの詳細情報のうち、mentions情報はユーザー IDです。
イベントの登録と解除
Game Chatソケットサーバから受信するイベントに対し、カスタムハンドラを登録または解除するには、以下のコードを使用します。
GameChat.dispatcher.(EVENT_NAME) += (CALLBACK_FUNCTION);
public delegate void onConnectedCallback(string data);
public onConnectedCallback onConnected;
//「connect」Eventに対する、コールバック
public delegate void onDisconnectedCallback(string reason);
public onDisconnectedCallback onDisconnected;
//「disconnect」Eventに対する、コールバック
public delegate void onMessageReceivedCallback(Message message);
public onMessageReceivedCallback onMessageReceived;
//「message」Eventに対する、コールバック
public delegate void onUserAddedCallback(UserInfo userinfo);
public onUserAddedCallback onUserAdded;
//「userAdded」Eventに対する、コールバック
public delegate void onUserRemovedCallback(Message message);
public onUserRemovedCallback onUserRemoved;
//「userRemoved」Eventに対する、コールバック
public delegate void onErrorReceivedCallback(string result, GameChatException exception);
public onErrorReceivedCallback onErrorReceived;
//「error」Eventに対する、コールバック
例外事項
Game Chat APIの使用中に発生する Exceptionに対する共通処理 Classは、以下のとおりです。
public class GameChatException
{
// Detail Error Code
// 不明なエラー
public static readonly int CODE_UNKNOWN_ERROR = 0;
// 初期化に失敗
public static readonly int CODE_NOT_INITALIZE = 1;
// パラメータが正しくない場合
public static readonly int CODE_INVAILD_PARAM = 2;
// ソケットサーバから発生したエラー
public static readonly int CODE_SOCKET_SERVER_ERROR = 500;
//ソケットから発生したエラー
public static readonly int CODE_SOCKET_ERROR = -501;
// ネットワークコネクションエラーおよびタイムアウトが発生した場合
public static readonly int CODE_SERVER_NETWORK_ERROR = 4002;
// サーバから取得したデータをパースする際のエラー
public static readonly int CODE_SERVER_PARSING_ERROR = 4003;
// HTTPエラーの場合、当該ステータスコードがレスポンスコードとして伝達されます。 (400, 403 ...)
// Error Code
public int code { get; set; }
// Error Message
public string message { get; set; }
}
Client API
チャンネルの購読
Subscription Data Class (per Unit)
public class Subscription
{
public string id;
public string channel_id;
public string user_id;
public string created_at;
}
ID | type | desc |
---|---|---|
id | string | 固有 ID |
channel_id | string | チャンネル ID |
user_id | string | チャットユーザーの固有 ID |
created_at | string | 作成日時 |
チャンネル購読リストを取得する
特定のチャンネルの購読データをリスト形式で取得するには、以下のコードを使用します。
GameChat.getSubscriptions(CHANNEL_ID, OFFSET, LIMIT, (List<Subscription> Subscriptions, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
foreach(Subscription elem in Subscriptions)
{
//handling each subscription instance
}
}));
チャンネル
Channel Data Class (per Unit)
public class Channel
{
public string id;
public string project_id;
public string unique_id;
public string name;
public string user_id;
public string created_at;
public string updated_at;
}
ID | type | desc |
---|---|---|
id | string | チャンネル ID(固有) |
project_id | string | プロジェクト ID |
unique_id | string | 開発会社で設定できるチャンネル ID(固有) |
name | string | チャンネル名 |
user_id | string | (チャンネルを作成した)チャットユーザー ID |
created_at | string | 作成日時 |
updated_at | string | 更新日 |
チャンネルリストを取得する
プロジェクトのチャンネルデータをリスト形式で取得するには、以下のコードを使用します。
GameChat.getChannels(OFFSET, LIMIT, (List<Channel> Channels, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
foreach(Channel elem in Channels)
{
//handling each channelInfo instance
}
});
ID | type | desc |
---|---|---|
OFFSET | int | 全体チャンネルリストから取得するチャンネルの開始位置(index) |
LIMIT | int | 取得するチャンネル数 |
チャンネルデータを取得する
チャンネル IDや固有 IDを用いてチャンネルデータを取得するには、以下のコードを使用します。
//CHANNEL_IDでのみ検索する場合、CHANNEL_UNIQUE_IDパラメータに nullを入れます。
//CHANNEL_IDと CHANNEL_UNIQUE_IDの値が同時に存在する場合、CHANNEL_UNIQUE_IDの値を優先的に検索します。
GameChat.getChannel(CHANNEL_ID, CHANNEL_UNIQUE_ID, (Channel Channel, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
//handling channelInfo instance
});
GameChat.getChannel(CHANNEL_UNIQUE_ID, (Channel Channel, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
//handling channelInfo instance
});
ID | type | desc |
---|---|---|
CHANNEL_ID | string | チャンネル ID(自動作成) |
CHANNEL_UNIQUE_ID | string | チャンネル(固有)ID(カスタマイズ可能) |
チャンネルの作成と削除
プロジェクト内で新しいチャンネルを作成または削除するには、Open APIを活用します。
セキュリティ問題のため、チャンネル作成やアップデートなどは、Open APIを活用して Server to Serverで直接行うことをお勧めします。 詳細は、Game Chat APIガイドをご参照ください。
メッセージ
(Received) Message Data Class (per Unit)
public class Message
{
public class User
{
public string id;
public string name;
public string profile;
}
public string message_id;
public string channel_id;
public string message_type;
public string content;
public string[] mentions;
public bool mentions_everyone;
public User sender;
public string created_at;
}
ID | type | desc |
---|---|---|
message_id | string | メッセージの固有 ID |
channel_id | string | チャンネル ID |
message_type | string | メッセージタイプ |
content | string | メッセージの内容(JSON文字列) |
mentions | string | メンション(タグ) |
created_at | string |
メッセージリストを取得する
特定のチャンネルに対するメッセージデータをリスト形式で取得するには、以下のコードを使用します。
GameChat.getMessages(CHANNEL_ID, OFFSET, LIMIT, SEARCH, QUERY, SORT, (List<Message> Messages, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
foreach(Message elem in Messages)
{
//handling each message instance
}
});
ID | type | desc |
---|---|---|
CHANNEL_ID | string | チャンネル ID |
OFFSET | string | 全体メッセージリストから取得するメッセージの開始位置 |
LIMIT | string | 取得するメッセージ数 |
SEARCH | string | メッセージ検索基準キー。 <例> content.text 空の文字列を伝達する場合、全体検索 |
QUERY | string | メッセージ検索の値。 完全一致のみ検索可能。 空の文字列を伝達する場合、全体検索 |
SORT | string | メッセージのソート順序(デフォルト: 降順 - 最新順) (オプション: 昇順) |
メッセージの翻訳
自動翻訳機能が有効化されている場合、任意のテキストを指定した言語に翻訳できます。 自動翻訳機能は、Papago Translationサービスと連携すると使用できます。
(Received) Translation Data Class (per Unit)
public class Translation
{
public string detectLang = "";
public string lang = "";
public bool translated = false;
public string message = "";
}
ID | type | desc |
---|---|---|
detectLang | string | ソース言語コード |
lang | string | ターゲット言語コード |
translated | bool | 翻訳の成否 |
message | string | 結果メッセージの内容(JSON文字列) |
ソース言語コードとターゲット言語コードについての説明は、Papago Text Translation APIガイドをご参照ください。
GameChat.translateMessage(CHANNEL_ID, SORCE_LANG, TARTGET_LANG, TEXT, (List<Translation> Translations, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
foreach(Translation elem in Translations)
{
//handling each Translation instance
}
});
GameChat.translateMessage(SORCE_LANG, TARTGET_LANG, TEXT, (List<Translation> Translations, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
foreach(Translation elem in Translations)
{
//handling each Translation instance
}
});
ID | type | desc |
---|---|---|
CHANNEL_ID | string | チャンネル ID |
SORCE_LANG | string | (送信する)テキストの言語名(auto: 自動検出) API Guideを参考 |
TARTGET_LANG | string | (翻訳受信する)テキストの言語コード (","で区切って、複数入力可能。 <例> "en, fr, th") Papago Text Translation APIガイドを参考 |
TEXT | string | 送信するテキスト |
チャットユーザー
(Received) Member Data Class (per Unit)
public class Member
{
public string id = "";
public string project_id = "";
public string nickname = "";
public string profile_url = "";
public string country = "";
public string remoteip = "";
public string adid = "";
public string device = "";
public string network = "";
public string version = "";
public string model = "";
public string logined_at = "";
public string created_at = "";
public string updated_at = "";
}
ID | type | desc |
---|---|---|
id | string | チャットユーザーの固有 ID |
project_id | string | ログインした Game Chatプロジェクト ID |
nickname | string | チャットユーザーのハンドルネーム |
profile_url | string | プロフィール画像 URL |
country | string | アクセスした国 |
remoteip | string | アクセス IPアドレス |
adid | string | 広告識別子 |
device | string | アクセスデバイスの環境 |
network | string | アクセスネットワークのタイプ (セルラー、Wi-Fi) |
version | string | アクセスアプリのバージョン |
model | string | アクセスデバイスのモデル |
logined_at | string | ログインした日 |
created_at | string | チャットユーザーの作成日時 |
updated_at | string | チャットユーザー情報の更新日 |
チャットユーザー情報のアップデート
チャットサーバのユーザー情報をアップデートできます。
// チャットユーザーのハンドルネームをアップデート
// ハンドルネームには、whitespace(spaces、tabs、line breaks)を除く2~128文字で入力できます。
GameChat.setName(MEMBER_ID, NAME, (Member member, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
//handling updated Member instance
});
//チャットユーザーのプロフィール画像 URLをアップデート
GameChat.setProfileUrl(MEMBER_ID, PROFILE_URL, (Member member, GameChatException Exception) => {
if(Exception != null)
{
// エラー処理
return;
}
//handling updated Member instance
});
ID | type | desc |
---|---|---|
MEMBER_ID | string | チャットユーザーの固有 ID |
NAME | string | チャットユーザーのハンドルネームまたは名前 |
PROFILE | string | プロフィール画像 URL |
GameChatExtension (Emoji, HyperLink)
受信メッセージに含まれた絵文字とハイパーリンクテキストを扱いやすいようにサポートするヘルパークラスです。
- TMP_GameChatTextUGUIは、Unityビルトインアセットの TextMeshProを拡張したクラスであるため、先に Package Managerを用いて TextMeshProをインストールする必要があります。
- TextMeshProアセットの場合、Unity 2018.2以上のバージョンからビルトインアセットとして含まれます。
- 絵文字スプライトシートの場合、絵文字バージョン13(Android)を基準に基本的に表示され、スプライトシートを変更してカスタマイズできます。
namespace GameChatUnity.Extension
{
public class TMP_GameChatTextUGUI : TextMeshProUGUI
{
public bool isHyperLinked { get; set; } // リンク形式アドレスをハイパーリンク処理するかどうか(HTMLタグを追加する)
public string LinkTextColor { get; set; } // hyperlink text color
}
}
<例>
using GameChatUnity.Extension;
TMP_GameChatTextUGUI message = msgObject.GetComponent<TMP_GameChatTextUGUI>();
//ハイパーリンクの認識と処理のために、テキストは setMessageを通じて入れます。
message.setMessage(MESSAGE_CONTENT);
message.color = Color.green;
message.isHyperLinked = true;
...
msgObject = Instantiate(msgObject) as GameObject;
...
// ハイパーリンクに対するクリックイベントリスナーは、直接実装してください。
//Handling with TMP_LinkInfo
TMP_LinkInfo linkInfoArr = message.textInfo.linkInfo[LINK_INDEX];
...