Unityオンラインマルチプレイゲームテストのための複数Unityエディタ起動


概要

PUN2を使ったオンラインマルチプレイゲームの学習をしていて、複数のUnityエディタ上での実行でちゃんとネットワーク上で同期がとれているか確認したくなった。そのやり方をまとめておく。

ざっくりいうと、
1. 開発中のプロジェクトディレクトリ(A)とは異なるパスにダミーのプロジェクトディレクトリ(B)を作成
2. ディレクトリ(A)配下の以下のディレクトリへのシンボリックリンクをディレクトリ(B)直下に用意
- Assets
- UnityPackageManager
- ProjectSettings
3. プロジェクトA,BともUnityエディタで開いてやってそれぞれで再生ボタンを押す

1,2 についてはシェルスクリプト化すると以下のような感じ(Mac前提)。

#!/bin/sh
# --設定--
# 開発中のプロジェクトのパス
PROJECT_PATH_ORG=<開発中のプロジェクトのパス>
# ダミーのプロジェクトのパス
PROJECT_PATH=<ダミーのプロジェクトのパス>

# ダミーのプロジェクトディレクトリを作成
rm -rf $PROJECT_PATH
mkdir $PROJECT_PATH

# ProjectSettingsディレクトリ以下のシンボリックリンクを貼る
mkdir $PROJECT_PATH/ProjectSettings
ln -s $PROJECT_PATH_ORG/ProjectSettings/* $PROJECT_PATH/ProjectSettings/

# Assetsディレクトリ以下のシンボリックリンクを貼る
mkdir $PROJECT_PATH/Assets
ln -s $PROJECT_PATH_ORG/Assets/* $PROJECT_PATH/Assets/

# UnityPackageManagerディレクトリ以下のシンボリックリンクを貼る
mkdir $PROJECT_PATH/UnityPackageManager
ln -s $PROJECT_PATH_ORG/UnityPackageManager/* $PROJECT_PATH/UnityPackageManager/

上のシェルスクリプトでCUIからプロジェクトBをUnityエディタで開くところまでやっとくともっと便利かもしれない。下を参考にしていずれやろうかな。

3.について同時に複数のプロジェクト開くには、UnityHub起動してからプロジェクト開けばOK。だけど上のシェルスクリプトでCUIからプロジェクトBをUnityエディタで開くところまでやっとくともっと楽かもしれない。下を参考にしていずれやろうかな。
- https://docs.unity3d.com/jp/460/Manual/CommandLineArguments.html

実際に試してみた

以下のスクリーンショットは、PUN2で始めるオンラインゲーム開発入門【その1】の動作を確認してみたときのやつ。

プロジェクトAでシーンを再生

プロジェクトBでシーンを再生

プロジェクトAでシーンの再生を停止

ちゃんと同期取れてることがわかる。

余談

やっててあれ?ってなったのが、元のプロジェクトでいじってたシーンがシンボリックリンク貼ってる側のプロジェクトを開いたときにデフォルトで表示されていなかったこと。
これはシーンファイルをダブルクリックすればいいだけ。デフォルトで表示されるものと勘違いしてた。

参考

http://tsubakit1.hateblo.jp/entry/2015/01/10/233000
http://reyloffice.blog.fc2.com/blog-entry-13.html