6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unityでyoutubeのコメントを降らせたい!

Last updated at Posted at 2021-01-10

どこぞやでみた配信のコメントをUnityに降らせるやつを自分でもやってみたかったので最近見つけたアセットを組みあわせてやってみました.

使用アセット

それぞれのアセットの詳解はせず,使う機能のみに絞って解説していきます.

YoutubeComment

boothでありがたいことに無償販売されている便利なアセットです.
詳解は省きますが,APIKEYとライブURLを指定するだけでコメントとスパチャをその他の情報と合わせて取得してくれる優れものです.
コメントを取得したとき,スパチャを取得したときそれぞれでイベントを登録できるようになっています.
image.png

Modular 3D Text

メッシュ化されたテキストを生成することのできるアセットです.
デフォルトで50のフォントが用意されている上,エディタ上で任意のフォントからメッシュデータを作成することも可能です.また,blendファイルが同梱されており,そちらからフォント生成を行えばより高速だそうです.
image.png

フォントの準備

今回はRictyを用意しました.
Unity上で,Tools->Tiny Giand Studios ->Modular3DTextからmodular3D用の設定ウィンドウを開きます.
image.png
Font Creationタブからフォントを作成します.
Create Fontのすぐ下のプルダウンメニューから作成する文字範囲の指定方法を選べます.
今回はUnicode Sequenceとし,3040-309Fの範囲を指定します.これはunicode上で平仮名を指定するものです.漢字を含めていないのは下手に全てを指定すると生成にとんでもない時間がかかってしまうからです.実際に利用する際は適宜任意のunicode範囲を指定してください.
指定ができたらCreate Fontボタンを押します.
image.png
エクスプローラーが開くので任意のttfファイルを指定します.
続いてobjファイルの生成先を聞かれるので,任意の場所に保存します.(プロジェクト内が好ましいです)
生成ができるとさらにassetファイルの生成先を聞かれるので他のフォントが保存されているAssets->Tiny Giant Studios -> Modular 3D Text -> Fontsに保存をします.
image.png
生成が成功すると,Fontsフォルダ内に以下の二つのアセットが生成されるはずです.
上が設定ファイルで,下にメッシュオブジェクトが格納されています.
image.png

コメントを降らせる準備

Modular3Dの設定

ヒエラルキーからModular3DのTextオブジェクトを作成します.
名前は適当にTextDropperなどとしておきます.
image.png
TextDropperのModular3DTextのインスペクタからいくつかセッティングをしていきます.
まずはMain SettingsFontに先ほど作成したフォントのアセットファイルを指定します.
次に,ModulesからAdd New Moduleボタンを押し,Add Gravityを指定します.
さらに,Adovanced SettingsからReposition old Charsのチェックを外します.
ここまでの設定で以下の状態になっていることを確認してください.
image.png

作成したオブジェクトに以下のスクリプトを作成してアタッチします.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using MText;
using UnityEngine;

public class Text3DDroper : MonoBehaviour
{
   [SerializeField] private int maxMessagesLength = 300;
    private string message;
    [SerializeField] private Modular3DText modular3DText = null;

    public void OnComment(List<Comment> comments)
    {
        foreach (var comment in comments)
        {
            message += comment.Message;
        }
        modular3DText.UpdateText(message);
    }

    public void Update()
    {
        if (message != null && message.Length > maxMessagesLength)
        {
            message = System.String.Empty;
        }
    }
}

modular3DTextにはインスペクタから同じオブジェクトのコンポーネントであるModular3DTextをD&Dします.
maxMessagesLengthにはstring型のmessageが取得したコメントを合計何文字まで記憶しておくかを指定します.制限を超えた場合は初期化することで,メモリの消費を抑えます.文字を出現させる処理はmodular3DText.UpdateText(message);の部分です.内部で差分チェックをしているようで,messageを連結して渡しても,前フレームのUpdateText()で実行された分については再度出現しないようになっているため,UpdateTextには追加された分ではなく直前までのコメント+追加のコメント分を渡します.
ここまでの作業で以下のようになっていれば大丈夫です.
image.png

YoutubeCommentの設定

ヒエラルキーから空のゲームオブジェクトを作成し,Youtube Commentスクリプトをアタッチします.APIKEYやVideoIDの設定の仕方は公式ドキュメントを参照してください.また,youtubeの1日のリクエスト上限はすぐに枯渇するので,反応しなくなったと思った場合にはリクエスト上限の確認をしましょう.
image.png

On Commentに先ほど作成したTextDropperをD&Dします.
指定ができたら,Runtime Onlyとなっている部分をEditor And Runtimeに変更し,No Functionの箇所をOn Commentにします.
image.png

準備完了!

あとは実行するだけでYoutubeLiveのコメントを拾って文字を降らせてくれます.output-palette.gif
有名配信者のコメントから拾ってきたので一気に沢山のコメントが降ってきましたね笑

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?