簡単なボイスチャット用プロジェクトの作成

目次

  概要
  「仮の」プレイヤーオブジェクト(プレハブ)を作成する
  MonobitVoice 関連コンポーネントのアタッチ
  新規プロジェクトを作成する
  簡易的なMUNサーバ接続&ルーム入室&キャラクタ生成処理の組み込み


概要

ボイスチャットの簡易的なプロジェクトを作成する

  このページでは、ボイスチャットを実装するための、簡易的なプロジェクトの作成手順について触れます。
  ただし、ここでは「ボイスチャットのみ」を実装するための最低限の機能だけに留め、
  接続エラー制御や、オブジェクト同期など、ゲームプレイ環境に必要な諸々の処理はすべて省きます。

  「実用的な」ボイスチャットサンプルとしては、「VRボイスチャット」のサンプルとして用意している、
  以下のプロジェクトの実行でお試しください。

    ■ ボイスチャット・サンプル (RandoMatchingReconnected & VoiceChat) > サンプル概要
    ■ ボイスチャット・サンプル (RandoMatchingReconnected & VoiceChat) > MUN 版 RandomMatcingReconnected との違いについて


「仮の」プレイヤーオブジェクト(プレハブ)を作成する

Cube を利用した、簡易的プレイヤーオブジェクト(プレハブ)の作成

  実際に上記2つの「事前設定」を満たすために、「VRボイスチャット」のパッケージ上でどのような操作が必要になるか、実例を示します。
  (既にMUN を利用して熟知している場合、この操作は簡単にできるかと思います。)

  まずは、「Resources」フォルダを作成します。
  以下の例では便宜上 Assets 直下に指定していますが、必ずしも Assets 直下である必要はありません。
  とにかく Assets 内のディレクトリであれば、どのディレクトリ内でも構いませんので、「Resources」という名前のフォルダを作成します。

  作成したら、その Resources フォルダに「プレイヤーキャラクタのプレハブ」を導入します。
  今回は手っ取り早い方法として、UnityEditor のメニューから GameObject > 3D Object > Cube を選択し、
  「立方体」としてプレイヤーキャラクタを生成しましょう。

  作成した「Cube」をプレハブ化します。
  生成した Cube は Hierarchy に登録されていますので、先に作成した Resources フォルダに対し、ドラッグ&ドロップしてください。、

  ドラッグ&ドロップ先の Resources フォルダを開くと、その中に Cube.prefab が作成されていることが分かります。
  便宜上、今回はこれを「自身が操作するプレイヤーキャラクタ」と認識します。
  ここで、Resource フォルダを展開した状態で Cube.prefab をクリックして「選択状態」にしておいてください。

  ここで、選択状態にある Cube.prefab の Inspector に表示されている、「Add Component」ボタンをクリックします。

  Add Component のプルダウンメニューから、Monobit Networking > Monobit View を選択します。
       

  以下のように、Inspector に Monobit View のコンポーネントが登録されます。
  必要に応じて Monobit View のパラメータ設定を行ないますが、今回は最低限の説明ですので、
  とりあえずここまでで「事前設定」は完了です。


MonobitVoice 関連コンポーネントのアタッチ

Cube.prefab に Monobit Voice 関連コンポーネントをアタッチする

  上述で実例を出した、便宜上のプレイヤーキャラクタ「Cube.prefab」に対して、Monobit Voice 関連コンポーネントを登録してみましょう。
  まずは先ほどの実例と同様、Resource フォルダを展開した状態で Cube.prefab をクリックして「選択状態」にしておいてください。

  選択状態にある Cube.prefab の Inspector に表示されている、「Add Component」ボタンをクリックします。

  Add Component のプルダウンメニューから、Monobit Voice Chat > Monobit Voice を選択します。
       

  すると、以下のように、Inspector に Monobit Voice を含む、複数のコンポーネントが追加されます。
    ※ これらのコンポーネントの詳細については、後述する下記リンクにて説明しています。

       ■ ボイスチャット機能の導入について > AudioSource コンポーネントについて
       ■ ボイスチャット機能の導入について > MonobitVoice コンポーネントについて
       ■ ボイスチャット機能の導入について > MonobitMicrophone コンポーネントについて
       ■ ボイスチャット機能の導入について > MonobitStreamingPlayer コンポーネントについて

  とりあえず、これだけで「Monobit Voice 関連コンポーネントの登録」は完了です。

自身の発言内容を、自身のスピーカーから出力されるようにする

  単体テストでボイスチャットが正常に機能するかどうかを確認するために、自身の発言内容を自身のスピーカーから出力されるようにしましょう。
    ※ 本来であれば、この操作は必須ではありません。

  Inspector に表示されている Monobit Voice コンポーネントのパラメータのうち「Debug Mode」と表示されている箇所について
  チェックボックスを ON の状態に設定してください。


新規プロジェクトを作成する

改めて、簡易的なボイスチャット確認用の新規プロジェクトを用意する

  プレイヤーオブジェクト(プレハブ)に対するボイスチャット実装のための手続きが完了したところで、
  MUN のネットワークライブラリを利用した「ボイスチャット実行までのMUNサーバ接続→プレイヤーキャラクタ生成」までを管理する
  新規シーンを作成しましょう。

  UnityEditor のメニューから、File > New Scene を選択してください。

  以下のメッセージが出現しますが、「Don't Save」ボタンをクリックしてください。

新規シーンを一旦保存する

  新規に作成されたシーンを一旦保存しましょう。
  UnityEditor のメニューから File > Save Scene を選択します。

  保存ファイル名は任意で構いませんが、例として「VoiceChatTest.unity」と指定して、「保存」ボタンをクリックしましょう。


簡易的なMUNサーバ接続&ルーム入室&キャラクタ生成処理の組み込み

スクリプト登録のための空オブジェクトを作成する

  新規に作成したシーンに、MUN の簡易接続&ルーム入室&プレイヤーキャラクタ生成処理を組み込んでみます。
  そのためには Hierarchy に「空オブジェクト」が必要ですので、それを作成します。

  UnityEditor のメニューから、GameObject > Create Empty を選択してください。

  Hierarchy に新規登録された、空のゲームオブジェクト「GameObject」を選択状態にしておきます。

  この状態で、GameObject の Inspector から「Add Component」を選択します。

  Add Component のプルダウンメニューから、New Script(リスト最下部に存在します) を選択し、
  New Script のメニュー内の Name 欄に「VoiceChatTest」と入力し、「Create and Add」ボタンをクリックしてください。
          

  すると、GameObject のコンポーネントとして、Voice Chat Test (Script) が生成されます。

MUNサーバ接続→キャラクタ生成までの簡易プログラムを組み込む

  作成した VoiceChatTest のスクリプトに、MUNサーバ接続 → キャラクタ生成までの簡易プログラムを組み込みます。
  追加された Voice Chat Test (Script) のコンポーネント内の Script 欄(VoiceChatTest と書かれたボックス) をダブルクリックしてください。

  すると、Unityで使用できるIDE(VisualStudio か MonoDevelop のいずれか)が立ち上がり、VoiceChatTest.cs が開きますので、
  ファイル内の文章(スクリプト)について、以下のコードをコピー&ペーストで張り付けて、書き換えて下さい。
using UnityEngine;
using System.Collections;
using MonobitEngine;

public class VoiceChatTest : MonobitEngine.MonoBehaviour {

    // 自身がルームに入室を試みたかどうかのフラグ
    bool isJoinOrCreateRoom = false;

    // 自身のプレイヤーキャラクタが生成されたかどうかのフラグ
    bool isMakeMyPlayer = false;

    // Use this for initialization
    void Start () {
        // MUNサーバに接続する
        MonobitNetwork.autoJoinLobby = true;
        MonobitNetwork.ConnectServer("VoiceChatTest_v1.0");
    }

    // Update is called once per frame
    void Update () {
        // 未接続状態なら何もしない
        if (!MonobitNetwork.isConnect)
        {
            return;
        }
        // ルーム入室処理未実行であれば、ルームの作成or入室をする
        if (!isJoinOrCreateRoom)
        {
            MonobitNetwork.JoinOrCreateRoom("VoiceChatTest", new RoomSettings(), null);
            isJoinOrCreateRoom = true;
            return;
        }
        // ルーム入室済みでキャラクタ未生成であれば、キャラクタを生成する
        if(MonobitNetwork.inRoom && !isMakeMyPlayer)
        {
            MonobitNetwork.Instantiate("Cube", Vector3.zero, Quaternion.identity, 0);
            isMakeMyPlayer = true;
            return;
        }
    }
}