ボイスチャットプログラムを作成する
目次
概要
追加したスクリプトの編集
MUNサーバに接続する
ルームを作成、あるいはルームに入室する
ルーム内でボイスチャット用オブジェクトを動的生成する
ここまでのVoiceChatScriptの内容
プログラムを保存する
ボイスチャットを利用するための「サーバ接続後にルームに入室し、ボイスチャットを開始する」プログラムを作成する
先に作成した VoiceChatScript.cs に対し、「サーバ接続→ルーム入室→ボイスチャット開始」を促すためのプログラムを作成します。
追加したスクリプトの編集▲
using ディレクティブを登録する
開いた VoiceChatScript.cs の 4 行目付近(using 〇〇〇〇; が羅列している直後)に、以下の一文を追加してください。
using MonobitEngine;
スクリプト上で MUN 用のコードを自由に記述できるよう、 MonobitEngine の using ディレクティブを入れておきます。
MonobitEngine.MonoBehaviour を継承する
続けて、VoiceChatScript.cs の 6 行目付近にある、「MonoBehaviour」と記述されている箇所について、
「MonobitEngine.MonoBehaviour」に変更しましょう。
public class VoiceChatScript : MonobitEngine.MonoBehaviour {
MonobitEngine.MonoBehaviour は UnityEngine.MonoBehaviour を継承していますので、
本来の UnityEngine.MonoBehaviour と同じ感覚で使用することができます。
加えて、MUNが提供する様々な機能を使用することもできます。
MUNサーバに接続する▲
MonobitNetwork.ConnectServer() メソッドで、MUNサーバに接続する
まずVoiceChatScript の 9 行目付近に記載されている Start() メソッドに、以下の処理を記述します。
void Start () {
// MUNサーバに接続する
MonobitNetwork.autoJoinLobby = true;
MonobitNetwork.ConnectServer("VoiceChatTest_v1.0");
}
事前に MonobitNetwork.autoJoinLobby プロパティ に true を設定し、MUNサーバ上に用意されたデフォルトロビーへの入室を許可します。
設定後、MonobitNetwork.ConnectServer() メソッドを使って、MUNサーバに接続します。
接続要求を受けたサーバ側では「VoiceChatTest_v1.0」のアプリケーションとして認証させ、接続完了後デフォルトロビーに誘導します。
ルームを作成、あるいはルームに入室する▲
MonobitNetwork.JoinOrCreateRoom() メソッドを使い、
ロビー入室後にルームが未作成であれば作成し入室、作成済みであればそのルームに入室する
続けて、VoiceChatScript.cs の 21 行目付近に、以下に記載している OnJoinedLobby() メソッドを追記します。
// ロビーに入室した直後のコールバックメソッド
public void OnJoinedLobby()
{
// もし「VoiceChatTest」と同名のルームが未作成なら、そのルーム作成して入室する
// もし「VoiceChatTest」と同名のルームが作成済みなら、そのルームに入室する
MonobitNetwork.JoinOrCreateRoom("VoiceChatTest", new RoomSettings(), null);
}
OnJoinedLobby() メソッド は、ロビーに入室した際に自動的にクライアント側で呼び出されるコールバックメソッドです。
先の Start() メソッド内に記述した内容により、サーバ接続後、MUNサーバ側でデフォルトロビーに入室させますので、
一連の接続処理が完了したあとでこのメソッドが呼び出されます。
さらにこのメソッド内で MonobitNetwork.JoinOrCreateRoom() メソッド を呼び出すことで、ルームの作成or入室を行ないます。
クライアント側で実行された際に、サーバ側に「VoiceChatTest」という名称のルームが作成されていない場合には作成して入室し、
作成されていた場合にはそのまま入室します。
この処置により、結果的にどのタイミングでクライアントが接続しても、最終的には1つのルーム内に複数のクライアントが接続します。
ルーム内でボイスチャット用オブジェクトを動的生成する▲
ルームに入室している場合、MonobitNetwork.Instantiate() メソッドで
プレハブから「ボイスチャット用オブジェクト」を動的に生成する
あとは、ルームに入室したときに、ボイスチャット用のオブジェクトを動的に生成して「ルーム内でのボイスチャット」を可能にします。
MUN の仕組みを使って「ルーム内でデータ同期するオブジェクトの動的生成」 には MonobitNetwork.Instantiate() メソッドを使って
プレハブからオブジェクトを生成しなければなりません。
そのための手順として、まず、VoiceChatScript.cs の 8 行目付近に、以下のパラメータを記述します。
// プレハブ化した「ボイスチャット用オブジェクト」のデータ
private GameObject chatObj = null;
GameObject 型の chatObj を用意し、その初期値を null にします。
先に言及すると、ボイスチャット用オブジェクトについて「ルーム入室中の最初の1回だけ」生成すれば一応シンプルな同期制御は可能になりますので、
ここではその処理について2重実行されるのを避けるために、この変数を用意します。
上記変数を使って、Update() メソッド内にて「ルーム入室中の最初の1回だけ」オブジェクトの動的生成を行ないます。
続けてVoiceChatScript.cs の 22 行目付近に、以下の処理を記述します。
// ルーム入室済みでボイスチャット用オブジェクトが未生成であれば、オブジェクトの動的生成を実行する
if (MonobitNetwork.inRoom && chatObj == null)
{
chatObj = MonobitNetwork.Instantiate("Sphere", Vector3.zero, Quaternion.identity, 0);
return;
}
MonobitNetwork.inRoom プロパティ が true、すなわちルーム入室済みであり、かつ chatObj が null の場合、
MonobitNetwork.Instantiate() メソッドを使って、ボイスチャット用オブジェクト「Sphere」の動的生成を実行します。
Unityの標準APIにある UnityEngine.Instantiate() メソッドと同様、このメソッドは実行結果として GameObject
型の情報を返すため、
それを chatObj に代入して null 以外の値にすることで、オブジェクトの動的生成処理の「2重実行の防止」をします。
ここまでのVoiceChatScriptの内容▲
ここまでの VoiceChatScript.cs の内容は以下の通りです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MonobitEngine;
public class VoiceChatScript : MonobitEngine.MonoBehaviour
{
// プレハブ化した「ボイスチャット用オブジェクト」のデータ
private GameObject chatObj = null;
// Start is called before the first frame update
void Start()
{
// MUNサーバに接続する
MonobitNetwork.autoJoinLobby = true;
MonobitNetwork.ConnectServer("VoiceChatTest_v1.0");
}
// Update is called once per frame
void Update()
{
// ルーム入室済みでボイスチャット用オブジェクトが未生成であれば、オブジェクトの動的生成を実行する
if (MonobitNetwork.inRoom && chatObj == null)
{
chatObj = MonobitNetwork.Instantiate("Sphere", Vector3.zero, Quaternion.identity, 0);
return;
}
}
// ロビーに入室した直後のコールバックメソッド
public void OnJoinedLobby()
{
// もし「VoiceChatTest」と同名のルームが未作成なら、そのルーム作成して入室する
// もし「VoiceChatTest」と同名のルームが作成済みなら、そのルームに入室する
MonobitNetwork.JoinOrCreateRoom("VoiceChatTest", new RoomSettings(), null);
}
}
プログラムを保存する▲
VoiceChatScript.cs を保存する
作成した VoiceChatScript.cs を保存しましょう。
VisualStudio(またはMonoDevelop)のメニューから VoiceChatScript.cs を保存するか、
もしくは CTRL キー + S キーの同時押しで保存してください。