どこぞやでみた配信のコメントをUnityに降らせるやつを自分でもやってみたかったので最近見つけたアセットを組みあわせてやってみました.
使用アセット
- YoutubeComment(フリー)
- Modular 3D Text(24.99$)
それぞれのアセットの詳解はせず,使う機能のみに絞って解説していきます.
YoutubeComment
boothでありがたいことに無償販売されている便利なアセットです.
詳解は省きますが,APIKEYとライブURLを指定するだけでコメントとスパチャをその他の情報と合わせて取得してくれる優れものです.
コメントを取得したとき,スパチャを取得したときそれぞれでイベントを登録できるようになっています.
Modular 3D Text
メッシュ化されたテキストを生成することのできるアセットです.
デフォルトで50のフォントが用意されている上,エディタ上で任意のフォントからメッシュデータを作成することも可能です.また,blendファイルが同梱されており,そちらからフォント生成を行えばより高速だそうです.
フォントの準備
今回はRictyを用意しました.
Unity上で,Tools
->Tiny Giand Studios
->Modular3DText
からmodular3D用の設定ウィンドウを開きます.
Font Creation
タブからフォントを作成します.
Create Font
のすぐ下のプルダウンメニューから作成する文字範囲の指定方法を選べます.
今回はUnicode Sequence
とし,3040-309F
の範囲を指定します.これはunicode上で平仮名を指定するものです.漢字を含めていないのは下手に全てを指定すると生成にとんでもない時間がかかってしまうからです.実際に利用する際は適宜任意のunicode範囲を指定してください.
指定ができたらCreate Font
ボタンを押します.
エクスプローラーが開くので任意のttfファイルを指定します.
続いてobjファイルの生成先を聞かれるので,任意の場所に保存します.(プロジェクト内が好ましいです)
生成ができるとさらにassetファイルの生成先を聞かれるので他のフォントが保存されているAssets
->Tiny Giant Studios
-> Modular 3D Text
-> Fonts
に保存をします.
生成が成功すると,Fontsフォルダ内に以下の二つのアセットが生成されるはずです.
上が設定ファイルで,下にメッシュオブジェクトが格納されています.
コメントを降らせる準備
Modular3Dの設定
ヒエラルキーからModular3DのTextオブジェクトを作成します.
名前は適当にTextDropperなどとしておきます.
TextDropperのModular3DTextのインスペクタからいくつかセッティングをしていきます.
まずはMain Settings
のFont
に先ほど作成したフォントのアセットファイルを指定します.
次に,Modules
からAdd New Module
ボタンを押し,Add Gravity
を指定します.
さらに,Adovanced Settings
からReposition old Chars
のチェックを外します.
ここまでの設定で以下の状態になっていることを確認してください.
作成したオブジェクトに以下のスクリプトを作成してアタッチします.
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には追加された分ではなく直前までのコメント+追加のコメント分を渡します.
ここまでの作業で以下のようになっていれば大丈夫です.
YoutubeCommentの設定
ヒエラルキーから空のゲームオブジェクトを作成し,Youtube Comment
スクリプトをアタッチします.APIKEYやVideoIDの設定の仕方は公式ドキュメントを参照してください.また,youtubeの1日のリクエスト上限はすぐに枯渇するので,反応しなくなったと思った場合にはリクエスト上限の確認をしましょう.
On Comment
に先ほど作成したTextDropperをD&Dします.
指定ができたら,Runtime Only
となっている部分をEditor And Runtime
に変更し,No Functionの箇所をOn Commentにします.
準備完了!
あとは実行するだけでYoutubeLiveのコメントを拾って文字を降らせてくれます.
有名配信者のコメントから拾ってきたので一気に沢山のコメントが降ってきましたね笑