Unity SDK
Game Chat Unity SDKの使い方について説明します。
システム要件
Game Chat Unity SDKを使用するためのシステム要件は、以下のとおりです。
最小スペック: 2018.4.0以上 (下位バージョンの Unityへの対応が必要な場合、[email protected] までご連絡ください。)
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でプロジェクトを構成する方法は以下のとおりです。
設定 > 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);
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;
}
});
USER_ID
string
チャットユーザーの固有 ID
Game Chatサーバとの接続解除
Game Chatソケットサーバとの接続を解除するには、以下のコードを使用します。
GameChat.disconnect();
チャットユーザー情報のアップデート
connect成功後にチャットユーザー情報を保存してアップデートするには、以下のコードを使用します。
ハンドルネームの変更
GameChat.setNickname(USER_ID, NickName, (member, exception) =>
{
if (exception != null)
{
// エラー処理
return;
}
});
USER_ID
string
チャットユーザーの固有 ID
NickName
string
チャットユーザーのハンドルネーム
Profile URLの変更
GameChat.setProfileUrl(USER_ID, ProfileUrl, (member, exception) =>
{
if (exception != null)
{
// エラー処理
return;
}
});
USER_ID
string
チャットユーザーの固有 ID
ProfileUrl
string
チャットユーザーの ProfileURL
チャンネルの購読と購読解除
特定のチャンネルに対して購読または購読解除を行うには、以下のコードを使用します。
GameChat.subscribe(CHANNEL_ID);
GameChat.unsubscribe(CHANNEL_ID);
CHANNEL_ID
string
チャンネル ID
メッセージの送信
特定のチャンネルにメッセージを送信するには、以下のコードを使用します。
GameChat.sendMessage(CHANNEL_ID, MESSAGE);
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
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
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
}
});
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
});
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;
}
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
}
});
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 = "";
}
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
}
});
CHANNEL_ID
string
チャンネル ID
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
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
});
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];
...
Last updated