Unityでニコニコ生放送のコメントを取得する

#はじめに

Unityでニコ生のコメントを取得できるアセットを作ってみました。
このアセットを使うとUnity上でコメビュを作ったり、コメントと連携するゲームを作ることができるようになります。

![comeview](https://qiita-image-store.s3.amazonaws.com/0/47146/4bfa56d4-524b-23ea-2fcd-f9bcad20f56e.png)
(Unity上に作った簡易コメビュ)

# 作ったアセット

* [anko2unity](https://github.com/TORISOUP/anko2Unity) :ニコ生コメントビューア「[やります！アンコちゃん](http://yarimasu.ankochan.net/)」からコメント情報を抜き取ってUnityへ転送するプラグインです
* [NicoliveCommentReciever](https://github.com/TORISOUP/NicoliveCommentReciever) : Unityでanko2unityからコメントを取得するアセットです

上記2つを組み合わせることで、Unity上で簡単にニコ生のコメントを取得できるようになります。

ニコ生のAPIって(というかニコニコ全体に言えるけど)**すごい使いにくい**上、コメントサーバとの通信プロトコルも**XMLSocket**だったりとなんかもういろいろとアレなので、そのへんの通信周りは既存のニコ生コメントビューアに任せることにしました。

「やります！アンコちゃん」を使った理由は自分が普段使っているからという理由でしかないので、気が向いたらNCV版も作ります。

# 使い方

## anko2unity

ダウンロードしてアンコちゃんのプラグインディレクトリに入れてください。 デフォルトでは17305番ポートを利用します。

## NicoliveCommentReciever

1. NicoliveCommentReciever.unitypackageをダウンロードしてUnityにimportしてください
2. 適当なGameObjectを生成し、NicoliveCommentRecieveComponentを貼り付けて下さい
3. コメントを受信するとMessageRecievedEventが発行されるため、これを購読すればOKです


```csharp:コメント受信の例
using NicoliveCommentReciever;
using UnityEngine;

public class Sample: MonoBehaviour
{
    void Start()
    {
        var receiver = GetComponent<NicoliveCommentRecieveComponent>();

        // 手動で接続する場合は呼び出す
        // receiver.Connect();

        //MessageRecievedEventを購読すればよい
        receiver.MessageRecievedEvent += (sender, args) =>
        {
            var comment = args.Comment;　//受信コメント
            Debug.Log(comment.Message); 
        };
    }
}
```

## コメントのフィールド一覧

```csharp
/// <summary>
/// コメント情報
/// </summary>
public struct Comment
{
    /// <summary>
    /// 匿名性
    /// </summary>
    public bool Anonymity { get; private set; }
    /// <summary>
    /// 投稿時刻
    /// </summary>
    public DateTime Date { get; private set; }
    /// <summary>
    /// コマンド
    /// </summary>
    public string Mail { get; private set; }
    /// <summary>
    /// ユーザ名
    /// </summary>
    public string Name { get; private set; }
    /// <summary>
    /// コメビュによって割り振られる名前
    /// </summary>
    public string NickName { get; private set; }
    /// <summary>
    /// コメント本文
    /// </summary>
    public string Message { get; private set; }
    /// <summary>
    /// コメント番号
    /// </summary>
    public int No { get; private set; }
    /// <summary>
    /// 投稿者属性
    /// </summary>
    public int Premium { get; private set; }
    /// <summary>
    /// スレッドID
    /// </summary>
    public int Thread { get; private set; }
    /// <summary>
    /// ユーザーID
    /// </summary>
    public string UserId { get; private set; }
    /// <summary>
    /// コメント位置
    /// </summary>
    public int Vpos { get; private set; }
    /// <summary>
    /// 地域情報
    /// </summary>
    public string Locale { get; private set; }

    /// <summary>
    /// プレミアム会員であるか？
    /// </summary>
    public bool IsPremium
    {
        get { return Premium == 1; }
    }

    /// <summary>
    /// 放送者/運営コメントであるか？
    /// </summary>
    public bool IsStaff
    {
        get { return Premium == 3 || Premium == 6; }
    }

   // 以下略
}
```

#最後に

ニコ生のコメント連携するゲーム、自分も遊びたいのでみんな作って下さい

#おまけ

このアセットを使うとこういうツールが作れます  
[みくみくまうす](http://mikumikumouth.net/)