Game Chat Unity SDK
    • PDF

    Game Chat Unity SDK

    • PDF

    Article Summary

    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でプロジェクトを構成する方法は以下のとおりです。

    1. NAVERクラウドプラットフォームコンソールで、Services > Gaming > Game Chatメニューを順にクリックします。
    2. プロジェクトの管理ページ URLをクリックしてダッシュボードにログインします。
    3. 設定 > SDKのダウンロードメニューを順にクリックし、Unity SDKのダウンロードをクリックします。
    4. Unityプログラムを実行し、プロジェクトを作成します。
    5. Unityで、Assets > Import Package > Custom Package...メニューを順にクリックします。
    6. ダッシュボードでダウンロードした「GameChatUnitySDK_xxxxxxxx」ファイルを読み込みます。
    7. パッケージにあるすべてのファイルを選択し、 [Import] ボタンをクリックします。
    8. プロジェクトを保存します。

    認証

    Game Chatインスタンスの初期化

    Game Chatプロジェクト IDを用いて Game Chatインスタンスを初期化するには、以下のコードを使用します。

    GameChat.initialize(PROJECT_ID);
    
    // シンガポールリージョンを使用する場合
    GameChat.setRegion("sg");
    GameChat.initialize(PROJECT_ID);
    
    IDtypedesc
    PROJECT_IDstringプロジェクト ID

    Game Chatソケットサーバとの接続

    Game Chatソケットサーバに接続する方法は以下のとおりです。

    1. チャットユーザー IDを用いてGame Chatソケットサーバにアクセスします。
      • Game Chatプロジェクトでチャットユーザー IDは固有の値です。
    2. APIを使用するためのトークンの値を取得します。
      • GameChat.connect以降に更新されたトークンの値を確認できます。
    3. トークンの値を取得した後、現在アクセス中のデバイスに対するチャットユーザー情報が更新されたのか確認します。
      • GameChat.connectのコールバックで渡される Memberは、更新されたデータです。

    Game Chatソケットサーバに接続するには、以下のコードを使用します。

    GameChat.connect(USER_ID,  (Member User, GameChatException Exception)=> 
    {
    
        if(Exception != null)
        {
            // エラー処理
            return;
        }
    });
    
    IDtypedesc
    USER_IDstringチャットユーザーの固有 ID

    Game Chatサーバとの接続解除

    Game Chatソケットサーバとの接続を解除するには、以下のコードを使用します。

    GameChat.disconnect();
    

    チャットユーザー情報のアップデート

    connect成功後にチャットユーザー情報を保存してアップデートするには、以下のコードを使用します。

    ハンドルネームの変更

    GameChat.setNickname(USER_ID, NickName, (member, exception) =>
    {
        if (exception != null)
        {
            // エラー処理
            return;
        }
        
    });
    
    IDtypedesc
    USER_IDstringチャットユーザーの固有 ID
    NickNamestringチャットユーザーのハンドルネーム

    Profile URLの変更

    GameChat.setProfileUrl(USER_ID, ProfileUrl, (member, exception) =>
    {
        if (exception != null)
        {
            // エラー処理
            return;
        }
        
    });
    
    IDtypedesc
    USER_IDstringチャットユーザーの固有 ID
    ProfileUrlstringチャットユーザーの ProfileURL

    チャンネルの購読と購読解除

    特定のチャンネルに対して購読または購読解除を行うには、以下のコードを使用します。

    GameChat.subscribe(CHANNEL_ID);
    
    GameChat.unsubscribe(CHANNEL_ID);
    
    IDtypedesc
    CHANNEL_IDstringチャンネル ID

    メッセージの送信

    特定のチャンネルにメッセージを送信するには、以下のコードを使用します。

    GameChat.sendMessage(CHANNEL_ID, MESSAGE);
    
    IDtypedesc
    CHANNEL_IDstringチャンネル ID
    MESSAGEstring送信メッセージテキスト

    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;
    }
    
    IDtypedesc
    idstring固有 ID
    channel_idstringチャンネル ID
    user_idstringチャットユーザーの固有 ID
    created_atstring作成日時

    チャンネル購読リストを取得する

    特定のチャンネルの購読データをリスト形式で取得するには、以下のコードを使用します。

    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;
    }
    
    IDtypedesc
    idstringチャンネル ID(固有)
    project_idstringプロジェクト ID
    unique_idstring開発会社で設定できるチャンネル ID(固有)
    namestringチャンネル名
    user_idstring(チャンネルを作成した)チャットユーザー ID
    created_atstring作成日時
    updated_atstring更新日

    チャンネルリストを取得する

    プロジェクトのチャンネルデータをリスト形式で取得するには、以下のコードを使用します。

    GameChat.getChannels(OFFSET, LIMIT, (List<Channel> Channels, GameChatException Exception) => {
    
        if(Exception != null)
        {
            // エラー処理
            return;
        }
    
        foreach(Channel elem in Channels)
        {
            //handling each channelInfo instance
        }
    });
    
    IDtypedesc
    OFFSETint全体チャンネルリストから取得するチャンネルの開始位置(index)
    LIMITint取得するチャンネル数

    チャンネルデータを取得する

    チャンネル 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
    });
    
    IDtypedesc
    CHANNEL_IDstringチャンネル ID(自動作成)
    CHANNEL_UNIQUE_IDstringチャンネル(固有)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;
    }
    
    IDtypedesc
    message_idstringメッセージの固有 ID
    channel_idstringチャンネル ID
    message_typestringメッセージタイプ
    contentstringメッセージの内容(JSON文字列)
    mentionsstringメンション(タグ)
    created_atstring

    メッセージリストを取得する

    特定のチャンネルに対するメッセージデータをリスト形式で取得するには、以下のコードを使用します。

    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
        }
    });
    
    IDtypedesc
    CHANNEL_IDstringチャンネル ID
    OFFSETstring全体メッセージリストから取得するメッセージの開始位置
    LIMITstring取得するメッセージ数
    SEARCHstringメッセージ検索基準キー。 <例> content.text
    空の文字列を伝達する場合、全体検索
    QUERYstringメッセージ検索の値。 完全一致のみ検索可能。 空の文字列を伝達する場合、全体検索
    SORTstringメッセージのソート順序(デフォルト: 降順 - 最新順) (オプション: 昇順)

    メッセージの翻訳

    自動翻訳機能が有効化されている場合、任意のテキストを指定した言語に翻訳できます。 自動翻訳機能は、Papago Translationサービスと連携すると使用できます。

    (Received) Translation Data Class (per Unit)

    public class Translation
    {
        public string detectLang = "";
        public string lang = "";
        public bool translated = false;
        public string message = "";
    }
    
    IDtypedesc
    detectLangstringソース言語コード
    langstringターゲット言語コード
    translatedbool翻訳の成否
    messagestring結果メッセージの内容(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
        }
    });
    
    IDtypedesc
    CHANNEL_IDstringチャンネル ID
    SORCE_LANGstring(送信する)テキストの言語名(auto: 自動検出)
    API Guideを参考
    TARTGET_LANGstring(翻訳受信する)テキストの言語コード
    (","で区切って、複数入力可能。 <例> "en, fr, th")
    Papago Text Translation APIガイドを参考
    TEXTstring送信するテキスト

    チャットユーザー

    (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 = "";
    }
    
    IDtypedesc
    idstringチャットユーザーの固有 ID
    project_idstringログインした Game Chatプロジェクト ID
    nicknamestringチャットユーザーのハンドルネーム
    profile_urlstringプロフィール画像 URL
    countrystringアクセスした国
    remoteipstringアクセス IPアドレス
    adidstring広告識別子
    devicestringアクセスデバイスの環境
    networkstringアクセスネットワークのタイプ (セルラー、Wi-Fi)
    versionstringアクセスアプリのバージョン
    modelstringアクセスデバイスのモデル
    logined_atstringログインした日
    created_atstringチャットユーザーの作成日時
    updated_atstringチャットユーザー情報の更新日

    チャットユーザー情報のアップデート

    チャットサーバのユーザー情報をアップデートできます。

    
    // チャットユーザーのハンドルネームをアップデート
    // ハンドルネームには、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
    });
    
    
    IDtypedesc
    MEMBER_IDstringチャットユーザーの固有 ID
    NAMEstringチャットユーザーのハンドルネームまたは名前
    PROFILEstringプロフィール画像 URL

    受信メッセージに含まれた絵文字とハイパーリンクテキストを扱いやすいようにサポートするヘルパークラスです。

    • 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];
    
    ...
    
    

    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.