Unityを用いて、Gameobjectをネットワーク越しに同期するにはUnityが提供する機能であるUNETを用います。UNETを用いるにはコードを色々書く必要があるので、便利なアセットがないかと思い調べてみたところ良さそうなアセットuMMOを見つけたため利用してみました。
ただ、公式のマニュアルや日本語の情報が見当たらなかったので、利用メモを残しておきます。
Cubeを同期する
まずは、極めてシンプルな動作を実現させてみることで、基本概念を学びましょう。同一マシン上で、ネットワーク経由で2つのアプリケーションのCubeを同期させます。1つのプロジェクトで開発を行い、コピーしたプロジェクトを別Unityで開いてテストをします。
1, 同期(Sync)対象オブジェクトの設定
・Cubeを作って名前をCubeToSyncに変更
・Net Objectスクリプトをアタッチ
・Synchronization MethodsをuMMO_PLUGINに変更
SyncUsing_DEFAULT_NATIVE_COMPONENT: バックエンドでUNETのNative機能を利用
SyncUsing_DEFAULT_uMMO_PLUGIN: バックエンドでuMMO独自のPluginを利用。データが圧縮されるなど効率がいいようです。同期もUNET Nativeより滑らか。
・Object TypeをNon Player Objectに設定
・設定の終わったCubeToSyncゲームオブジェクトをPrefab化する。次の設定で利用する。
2, uMMOネットワークマネージャーの設定
・/Assets/uMMO/Extension/prefabs/uMMO をヒエラルキーに追加
・uMMOの子オブジェクトのPL_UNETNetworkManagerの設定を変更
Auto Create Playerのチェックを外す(チェックONの場合は、Player Prefabで設定されたGameobjectが起動時にインスタンス化されます)
Registered Spawnable Prefabsに同期対象のPrefabを登録する
3, Unityプロジェクトをコピーして、同一マシンで2つのプロジェクトを開く
uMMOは一つのプロジェクトがサーバーとしてもクライアントとしても動作できるようになっています。
デフォルトでは、
・サーバーになるかクライアントになるかを起動時にユーザーが選択する
・Clientの接続先サーバーはLocalhost
・ポート7777を利用
起動後
右のUnityエディタでDedicated Serverを選択する
左のUnityエディタでClientを選択する
右のUnity(サーバー)のCubeをSceneビューで上下に動かすと、左(クライアント)のCubeも同期されて動きます。
Unity-chanを同期する(Mechanimキャラクターの同期)
では次に、Animatorを使って動いている、キャラクターのアニメーションを同期させてみます。
・ユニティちゃん 3Dモデルデータをダウンロードしてプロジェクトに追加しておきます。
・/Assets/UnityChan/Scnes/ActionCheck をベースに改造します
1, 同期(Sync)対象オブジェクトの設定:UnityChan
Cubeの場合と同様に、同期対象であるUnityChanにNet Objectスクリプトをアタッチして設定します。
・Synchronization MethodsをuMMO_PLUGINに変更
その際、Animatorに設定されたNextとBackにもチェック
・Object TypeをNon Player Objectに設定
・自動的に追加されるNetwork AnimatorスクリプトのAnimatorの設定
unitychanプレファブを選択。その際、Animatorに設定されたNextとBackにもチェック
unitychanにアタッチしたスクリプトを設定し終わったら、忘れずにApply Changes To Prefabを実行して、Prefabに変更を反映させます。
2, uMMOネットワークマネージャーの設定
・/Assets/uMMO/Extension/prefabs/uMMO をヒエラルキーに追加
・uMMOの子オブジェクトのPL_UNETNetworkManagerの設定を変更
Auto Create Playerのチェックを外す(チェックONの場合は、Player Prefabで設定されたGameobjectが起動時にインスタンス化されます)
Registered Spawnable Prefabsに同期対象のunitychanプレハブを登録する
3, 実行して確認
サーバー側でアニメーションを変更すると、クライアント側も動悸して変更されます
この作品はユニティちゃんライセンス条項の元に提供されています