0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity上でTwitchのチャットコメントを取得・Console出力する

Posted at

Unity上でTwitchのチャットコメントやフォロー通知などを受け取るためのライブラリ『UniTwitchClient』を自作したので、今回はこれを利用してUnityプロジェクト上でTwitchのチャットコメントを取得し、実際にConsoleに出力するまでの最短の導入手順について解説いたします。

1. Unityプロジェクトを作る

まず、導入するためのUnityプロジェクトを作ります。
image.png
エディターバージョンは、2021.3以降が望ましいです。
それ以前のバージョンでは、動作確認しておりません。

2. 依存ライブラリをUPMでインストールする

UniTwitchClientはUniRx、UniTask、Newtonsoft.Json-for-Unityに依存しているので、これらのインストールを行います。
UPMを使って以下の手順でインストールしていけばOKです。

UniRx( https://github.com/neuecc/UniRx )をインストール

  1. Package Managerウィンドウの左上の+を押す
  2. Add package from git URLで以下URLを入力

https://github.com/neuecc/UniRx.git?path=Assets/Plugins/UniRx/Scripts

UniTask( https://github.com/Cysharp/UniTask )をインストール

UniRxと同様の手順で以下のURLを入力してインストール
https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask

Newtonsoft.Json-for-Unityをインストール

  1. Package Managerウィンドウの左上の+を押す
  2. Add package by nameで以下を入力してAddを押す
    com.unity.nuget.newtonsoft-json
    image.png

3. UniTwitchClientをUPMでインストール

UniRxやUniTaskと同様、Package Managerウィンドウ左上の+から、Add package from git URLで以下のURLを入力して、UniTwitchClientをインストールします。
https://github.com/mojopon/UniTwitchClient.git?path=Assets/UniTwitchClient

4. Twitchのアクセストークンを取得する。

Twitchのサービスを認証する際、アクセストークンが必要となります。
今回はTwitchTokenGenerator.comというサイトを使ってアクセストークンを生成します。
まずTwitch.tvで認証したいアカウントにログインしたのち、以下のサイトにアクセスしてください。
https://twitchtokengenerator.com/

サイトを開くとポップアップがでますが、赤枠の部分をクリックでOKです。
image.png

今回Twitchチャットのコメントを取得する上で必要となるスコープは、chat:read及びchat:editです。
Available Token Scopesの中のchat:read及びchat:editのAdd Scope欄をYesにします。

image.png

選択を終えたら右下の方にあるGenerate Token!という緑色のボタンを押します。
TwitchのOAuth認証サイトに移動して、許可を求められると思いますので「許可」ボタンを押してください。
するとTwitchTokenGenerator.comに再びリダイレクトされるので、Generated Tokens欄にあるACCESS TOKENをメモしておいてください。
後で使います。
image.png

赤で塗りつぶしてある箇所にアクセストークンが表示されているはずです。

5. UniTwitchClientを利用するスクリプトを作成して、チャットのコメントをConsoleに出力する。

UniTwitchClientを利用して、Unity上でコメントを取得するスクリプトを書きます。
Sampleというスクリプトを新規作成し、以下のコードを書きます。

using UnityEngine;
using UniTwitchClient.Chat;
using UniRx;

public class Sample : MonoBehaviour
{
    string accessToken = "ここにアクセストークンを入力";
    string userName = "Twitchユーザーネームを入力";
    string channelName = "コメントを取得するチャンネル名を入力";
    
    void Start()
    {
        var twitchChatClient = new TwitchChatClient(new TwitchIrcCredentials(accessToken, userName)).AddTo(this);
        twitchChatClient.TwitchChatMessageAsObservable
                        .Subscribe(x => Debug.Log($"Name:{x.DisplayName}({x.UserNickname}), Message:{x.Message}"))
                        .AddTo(this);
        twitchChatClient.Connect(channelName);
    }
}

accessTokenの部分に先ほど(項目4)で取得したアクセストークンを入力。
userNameはTwitchのユーザーネームを入力。
channelNameはコメントを取得したいチャンネルのチャンネルネームを入力(例:https://www.twitch.tv/anomaloris のコメントを取得したい場合はanomalorisと入力)

準備ができたら、Sampleスクリプトをシーンに配置してシーン再生します。
ログイン時のシステムメッセージがConsoleに表示された後、対象チャンネルのコメントがあればConsoleに出力されます。

Twitch.gif

こんな感じです。Twitchチャット(左)に入力したコメントがConsole(右)に出力されました。

ログイン時のシステムメッセージを表示したくない場合はTwitchChatMessageAsObservableに以下のようなWhere句オペレーターをつけ足せばユーザーメッセージのみ表示されるようになります。
TwitchChatMessageクラスのCommandプロパティには受け取ったメッセージのIRC Commandが格納されていて、ユーザーがコメントした際のIRC CommandはPrivMsgとなります。

twitchChatClient.TwitchChatMessageAsObservable
                .Where(x => x.Command == TwitchIrcCommand.PrivMsg)
                .Subscribe(x => Debug.Log($"Name:{x.DisplayName}({x.UserNickname}), Message:{x.Message}"))
                .AddTo(this);

まとめ

必要な手順をまとめると

  1. 必要パッケージ(UniRx, UniTask, Newtonsoft-Json-for-Unity,UniTwitchClient)をUPMでインストール
  2. 認証に使うアクセストークンを取得
  3. UniTwitchClientでコメント取得

といった感じです。

次回はUniTwitchClientを使ってチャンネルフォローされた際の通知を取得する方法の解説記事を書こうと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?