マルチ ユーザー編集の概要

マルチ ユーザー編集システムのしくみの基本概念について示します。

Windows
MacOS
Linux

マルチ ユーザー編集のワークフローは、クライアントサーバー モデルを基に構築されており、単一の サーバー が複数の セッション をホストするものです。各セッションは個別の仮想ワークスペースで、同一ネットワークの Unreal Editor インスタンスが共有環境内で同じプロジェクト コンテンツで共同作業するために接続できます。

マルチ ユーザー編集のネットワーク サーバーとクライアント

セッション ワークスペース内では、Unreal Editor のインスタンスで実行するように、プロジェクト コンテンツで各ユーザーが作業できます。例えば、

  • 一部のユーザーが標準のデスクトップ PCセットアップ (必要な場合は別のプラットフォーム) で、キーボードとマウスを使用して作業できます。

  • 他のユーザーがエディタの VR 編集モードを使用することを選択し、VR ヘッドセットとコントローラーでシーンを視覚化し作業することもできます。あるいは Virtual Camera (仮想カメラ) のようなプラグインを使用して、モバイル デバイスで同じシーンに入ることもできます。

接続されたユーザーがレベルに変更を加える、またはプロジェクトのアセットを保存するたびに、Unreal Editor のインスタンスは自動的に変更に関する情報をサーバーに転送します。サーバーはこれらのすべての変更記録つまり トランザクション を追跡し、他のすべての接続クライアントにトランザクションを送信するようになっています。各クライアントは独自の環境内で同じ変更をローカルに適用します。このようにして、現在のレベルやプロジェクトの他のアセットに対する全ユーザーのビューは、変更で最新の状態に維持されます。

トランザクションを同期する

マルチ ユーザー編集システムは、作業しているアセットのタイプと変更の種類により、接続クライアント間で変更を同期するために異なる戦略を選択します。

レベル:即時の同期

レベルのコンテンツに対するすべての変更は、セッションにある他のすべてのコンピュータと即時に同期されます。アクタを追加や削除、アクタを移動、マテリアルを交換、アクタのプロパティを変更すると、セッションにいる他のすべてのユーザーはこれらの変更がすぐに反映されることがわかります。ツールをドラッグして移動、回転、あるいはアクタのスケールを実行すると、ドラッグしている間に複数トランザクションが発生します。マウスボタンを放す前でもこれらの変更が発生していることが他のユーザーに表示されます。

例えば、次のビデオでは、左のユーザーがアクタをドラッグして変更すると、右のビューポートに、ドラッグの途中でも、すぐに変更が反映されていることがわかります。同様に右のユーザーがオブジェクトを回転させると、左側に変更がすぐに表示されます。

他のユーザーの変更が反映されるのは、同じエディタ モードを使用している場合だけです。つまり両方とも編集モード、または、Play In Editor (PIE) または Simulate モードのいずれかである場合です。

他のアセット:保存時の同期

マルチ ユーザー編集システムは、Unreal Engine プロジェクトの多くのアセット タイプを変更するたびに即時に同期しません。これにはマテリアルとマテリアル インスタンス、スタティック メッシュ アセット、ブループリント クラスなどアセット タイプが含まれます。これらの場合、アセットに対して変更したとき、環境ですぐに変更が反映されるのを確認できるのはユーザー本人だけです。変更を保存すると、マルチ ユーザー編集システムはトランザクションをセッションにいる他のすべてのユーザーに送信します。 

この場合は、トランザクションは変更の記録ではなく、実際に保存されたアセットです。これらの更新されたパッケージのいずれかをすぐに受け取るエディタの各インスタンスは、それをホットリロードし、変更を表示します。

例えば、次のビデオでは、左のユーザーがマテリアルを変更すると、この変更はすぐに同期されません。ユーザーがこの変更をアセットに保存すると、トランザクションが処理されて、右のユーザー画面に変更が現れます。

アセットを保存した後に、自動的にそれに対するロックを獲得します。さらに、一部のタイプのアセットで変更を保存しないと、マルチ ユーザー編集システムは他のユーザーに対して該当するアセットがダーティであるとマークします。以下の「競合を回避する」を参照してください。

シーケンサ:再生の同期とオプションの UI の同期

マルチ ユーザー編集システムはレベル シーケンスとマスター シーケンスをレベルのように扱います。トラックの追加や削除、新しいキーフレームの追加などユーザーがシーケンスに変更を加えると、セッションにいる他のすべてユーザーと変更がすぐに同期されます。 

さらに、ユーザーがシーケンスを再生すると、同じシーケンスを開いているすべてのユーザーですぐに再生されます。停止できるのは、再生を開始したユーザーだけです。シーケンスが停止した後は、どのユーザーも再び再生できます。

1 人のユーザーがシーケンサ UI を開いたときに、マルチ ユーザー編集システムが自動的にすべてのクライアントでこの UI を開くように選択することもできます。マルチ ユーザー編集システムは、同じシーケンスを開いているすべてのユーザーで再生を同期するからです。この UI 同期オプションにより、必ずすべてのユーザーが同時に同じシーケンスの再生を確認できます。

次のビデオでは、マルチ ユーザー編集システムがシーケンサ UI イベント、イベントの再生、イベントの編集を同期する方法を示します。

前に示したシーケンサでの UI 同期を有効にするには、Concert.EnableOpenRemoteSequencer コンソール コマンドを使用します。詳細については、「マルチ ユーザー編集リファレンス」「コンソール コマンド」セクションを参照してください。

マルチ ユーザー編集システムは再生イベントを同期しますが、コンピュータごとに異なるフレーム レートでアニメーションを再生することがあります。Unreal Editor の 1 つのインスタンスと別のインスタンスでフレーム レートまで一致した結果を期待できません。

プレゼンス

マルチ ユーザー編集システムには、セッションの他のユーザーが実行している内容を確認する方法がいくつか用意されています。

次のセクションで説明するプレゼンス情報は、表示名と色で接続ユーザーを識別します。[Project Settings (プロジェクト設定)][Display Name (表示名)] および [Avatar Color (アバター カラー)] でこれらの値を各ユーザーがカスタマイズできます。詳細は、「マルチ ユーザー編集リファレンス」を参照してください。

位置および視点

他のユーザーと同じレベルで作業している間、シーンにそれらのユーザーの位置と視点を表すアバターが表示されます。それらのユーザーがシーンで操作すると、マウス カーソルやモーション コントローラーでハイライトしたオブジェクトを示すレーザーも表示されます。

例えば、次の画像は同じレベルで作業している 2 人のデスクトップ ユーザーのアバターが表示されています。

マルチ ユーザー編集のデスクトップ アバター

いつでも、[Connected Clients (接続クライアント)] パネルのコントロールで、このプレゼンス情報を調整できます。([Multi-User Session (マルチ ユーザー セッション)] ウィンドウおよび現在のサーバー名とセッション名が選択されたときに [Multi-User Browser (マルチ ユーザー ブラウザ)] ウィンドウに、このパネルがあります)。

マルチ ユーザー編集接続クライアント パネル

アイコン

説明

ユーザーの視点にテレポート

対象ユーザーの位置 (同じ視点) にすぐにテレポートします。

プレゼンスの可視性の切り替え

対象ユーザーのアバターとレーザー ポインタの表示を切り替えます。

セッションの変更履歴

[Multi-User Session (マルチ ユーザー セッション)] ウィンドウで、現在のセッションで発生している編集トランザクションのリスト、さらにユーザーがセッションの接続および切断を実行するたびに記録が表示されます。

セッションの変更履歴

アセットの変更履歴

個別のアセットに対する変更のリストも表示できます。コンテンツ ブラウザでアセットを右クリックして、[Multi-User (マルチ ユーザー)] > [Asset History (アセットの履歴)] を選択します。この特定アセットが変更されたすべてのトランザクションのリストが表示されます。

アセットの変更履歴

競合を回避する

複数ユーザーが同じコンテンツで同時に作業することを許可するとき、同時に同じものを変更しようとすることがよくあります。このとき管理が甘いと、ユーザーがコントロールを得るために競合し、実施した変更が失われたりしてフラストレーションの元になります。一方、厳しくしすぎると、必要なときに必要な内容を変更する機能が失われ、作業がスローダウン、あるいは完全にできなくなります。

マルチ ユーザー編集システムはこれらの 2 つの極端な状況の間でバランスをとり、ユーザー間で最もよく発生する、競合や上書きの問題を回避します。

ドラッグしている選択対象をロックする

レベルのビューポートで選択対象をドラッグしている間、例えば、移動、回転、サイズ変更しているとき、対象のアクタを排他的にコントロールできます。 レベル ビューポート でツールでドラッグする、または [Details (詳細)] パネルでプロパティを設定することで、別のユーザーが同じアクタに変更を試みても、それらはすぐに戻ります。

ドラッグ操作を停止するとすぐ、アクタが選択されている状態であっても、他のユーザーがアクタに作業できるようになります。

アセットをロックする

他のユーザーが特定のアセットを変更しないようにする場合は、ロックできます。アセットがロックされている間、ロックしたユーザーだけが新しい変更を保存できます。他のユーザーはロックされたアセットを自分のプロジェクトでローカルに変更できますが、ロックのオーナーのユーザーが解放するまで、変更を保存できません。

コンテンツ ブラウザ のアセットのサムネイルでオーバーレイによって、アセットのロックと変更がわかります。アセットにマウス カーソルを合わせると、ロックのオーナーやアセットを変更したユーザーに関する詳細情報が表示されます。

アセットのロックとダーティ フラグ

オーバーレイ

説明

ユーザー自身のロック

緑色はユーザー自身がアセットをロックしたことを示します。このまま変更を続けることができます。ロックを解放するまで他のユーザーはこのアセットを変更することはできません。

他のユーザーによるロック

オレンジ色は別のユーザーがアセットをロックしたことを示します。プロジェクトでローカルに変更できますが、ロックのオーナーが解放するまで、変更を保存して、他のユーザーと変更を同期することはできません。

変更されているが、別のコンピュータで保存されていない

オレンジ色のアスタリスクは、アセットが別のコンピュータでダーティである (変更が保存されていない) ことを示します。

選択中のアセット タイプのみがこのアイコンでマークされます。この状態でのアセットの変更には注意が必要です。変更を保存するどのユーザーも、ファイルのロックを最初に取得し、他のすべてのクライアントに変更を伝達します。これにより他のユーザーが実行した変更が失われる可能性があります。

(複数の) アセットをロックおよびアンロックするには、 コンテンツ ブラウザ でそのアセットを右クリックして、 [Multi-User (マルチ ユーザー)] > [Lock Asset(s) (アセットのロック)] または [Multi-User (マルチ ユーザー)] > [Unlock Asset(s) (アセットのアンロック)] を選択します。

アセットのロックとアンロック

アンロックされたアセットに変更を保存するときは常に、再び変更する可能性が最も高いユーザーという仮定で、ユーザー自身の代わりにマルチ ユーザー編集システムが自動的にロックします。他のユーザーが変更するためにアセットを解放するには、手動でロックを解放する必要があります。

アンドゥとリドゥ

接続ユーザーそれぞれは、自身の操作履歴にのみアクセスできます。この履歴で、ユーザーは自由に操作のアンドゥとリドゥを実行できます。セッションの一部ではなく、オフラインで作業している場合と同様です。しかし、セッションで他のユーザーが実行した操作をアンドゥやリドゥを実行できません。

共通の状態から開始する

遅延の拡大や帯域を大きく占有することを回避するために、マルチ ユーザー編集システムのサーバーは接続ユーザー間でプロジェクトの全コンテンツを送信しません。 代わりに、即時の同期が必要なときに軽量のトランザクション レコードを交換します。セッションの間にアセットが変更および保存されたときにレベル、スタティック メッシュ、ブループリントなどのアセットのみを送信します。

すべての接続ユーザーで到着したトランザクションを同じ方法で必ず適用する、したがって、すべてのユーザーのコンテンツが他のユーザーのコンテンツと同期される、唯一の方法は、接続ユーザーがまったく同じ状態の同じコンテンツで作業を*開始*することです。このようにして、トランザクションの同じリストが同じ順で各クライアントに適用され、各ユーザーのコンテンツの全体状態が同期されていることが保証されます。

すべてのユーザーが同じコンテンツで開始する一般的な方法は、Perforce、Git、SVN などのソース コントロール システムを使用することです。各ユーザーがローカル コピーを、他のユーザーがセッションに接続する前と同じ変更リストやリビジョンと確実に同期できます。詳細については、以下の「マルチ ユーザー編集とソース コントロール」を参照してください。

ソース コントロールを使用することは必須ではありません。外部のソース コントロール システムなしで、マルチ ユーザー編集を使用できます。しかし、一緒に作業する必要があるすべてのユーザーが、まったく同じプロジェクト コンテンツで作業を開始できるように、所属組織内でプロジェクトのコンテンツを共有する方法を見つけることをお勧めします。

セッションの検証

ユーザーがセッションに接続を試みるたびに、サーバーはコンテンツと作業環境の特定の属性をチェックし、セッションが最初に開始されたコンテンツと一致しているかどうかを確認します。これらのチェックが失敗すると、サーバーはユーザーがセッションに参加することを許可しません。

  • UE4 のバージョン - セッションに接続を試みるユーザーが、セッションを開始したユーザーと同じバージョンの Unreal Engine を使用していることをサーバーがチェックします。例えば、セッションを開始したユーザーがバージョン 4.22 を使用している場合、バージョン 4.23 を使用している別のユーザーが参加しようとすると、サーバーは接続を許可しません。これにより、異なるバージョンの間でアセット形式が変更されたことによる問題を回避できます。

  • プロジェクト名 - セッションに接続を試みるユーザーが、セッションを作成するために使用したプロジェクト名と一致しているプロジェクトを開いていることをサーバーがチェックします。このチェックに失敗すると、サーバーは 2 つのプロジェクトのコンテンツが同じものではないと想定し、接続を拒否します。 接続に失敗 - 不正なプロジェクト名

  • ソース コントロール リビジョン - セッションを開始したユーザーが Unreal Editor のソース コントロール プロバイダに接続した場合、サーバーはプロジェクトの変更リストやリビジョンをセッションに関連付けます。ソース コントロール プロバイダをアクティブにしている別のユーザーがセッションに接続を試みるとき、変更リストやリビジョンが、セッションに関連付けられたものと一致するかどうかをサーバーがチェックします。 

  • ローカルに変更したファイル - ソース コントロール プロバイダに接続し、ローカルに変更したファイルがある場合、サーバーにより、新しいセッションの作成および既存のセッションへの参加ができません。これにより特定のアセットで同じ変更リストで異なるバージョンが生まれる可能性が排除されます。 接続に失敗 - ローカルに変更したファイル

トランザクションと変更の保持

ライブ セッションでチームメンバーとともに作業しているとき、エディタは一種の仮想サンドボックスで、ローカル プロジェクト コンテンツにトランザクションを適用します。ディスクにあるプロジェクト ファイルは、ユーザーがセッションにいる限り、実際には変更されません。マルチ ユーザー編集システムは、変更の追跡を処理して、Unreal Editor でトランザクションをプロジェクト コンテンツに適用した結果を表示します。

いつでも、セッションの参加者は、セッションの変更を**保持する**ように選択でき、現在のセッションで実行されたすべての変更をディスク上のローカル ファイルに適用します。ソース コントロール プロバイダに接続しながら、セッションを開始した場合、同じ変更を新しい変更リストやリビジョンにチェックインすることもできます。

ツールバーからのセッションの変更の保持

変更を保持しないでセッションを抜ける場合、エディタは自動的に、セッションを開始または参加する前の、プロジェクトの状態を戻します。セッション中に変更した、プロジェクト内のすべてのアセットをホットリロードして、セッションでの変更を破棄します。セッションを離れた後にセッションの変更を見ることはできませんが、トランザクションは完全には失われません。 各セッションでは、すべてのユーザーが離れたときでも、すべてのトランザクションのレコードが保持されます。後で同じセッションに再び参加すると、マルチ ユーザー編集システムはそれらすべての同じトランザクションをエディタに再適用します。

冗長性

作成したユーザーが明示的に削除するまで、またはサーバー自体がシャットダウンされるまで、サーバーは各セッションを維持します。したがって、個別のクライアントまたはすべてのクライアントでのクラッシュや切断があっても、変更が失われることはありません。ユーザーはサーバーに再接続して、作業していた場所を選択するだけです。

サーバーは予期しないシャットダウンによる情報を喪失を防ぐため、セッション レコードをディスクに保存します。

  • サーバーが異常にシャットダウンされた場合、サーバーをその次に再起動したときに、シャットダウン時の状態に開いていたすべてのセッションがすぐに復元されます。

  • サーバーを正常にシャットダウンした場合、すべてのオープン セッションが削除されます。しかし、サーバーが新しいセッションを保存するように選択した場合、あとから復元できます。詳細については、次のセクションを参照してください。

セッションの保存と復元

新しいセッションを作成する前に、セッションから離れて戻ることがわかっている場合、マルチ ユーザー編集サーバーでセッションのトランザクションの名前付きレコードを保持できます。

セッションのレコードを保存するには、新しいセッションを作成するとき、[Create a Session (セッションの作成)] ウィンドウの [Save Session As (名前を付けてセッションを保存)] チェックボックスをオンにします。名前はデフォルトでは、[Session Name (セッション名)] ボックスに入力した名前に一致するように設定されますが、異なる値が必要な場合にオーバーライドできます。

名前を付けてセッションを保存

サーバーからセッションを削除した後、またはサーバーを正常にシャットダウンした後、オリジナルのセッションは [Session Browser (セッション ブラウザ)] ウィンドウに表示されなくなります。したがって、復元するまで、接続できません。

セッションを復元するには、新しいセッションを一から開始するときのように [Create a Session (セッションの作成)] ウィンドウを開きます。しかし今度は [Session to Restore (復元するセッション)] チェックボックスをオンにして、リストから復元するセッション名を選択します。

保存されたセッションの復元

セッションを復元するときに留意が必要なことは、既存のセッションに参加するときのように、ディスクのプロジェクト コンテンツが、セッションが最初に作成された時点の、プロジェクトのコンテンツの状態に一致する必要があります。

サーバーはセッションのレコードを Unreal Engine のインストール フォルダの Engine/Programs/UnrealMultiUserServer/Saved/Concert に保存します。復元できないように、保存されたセッションを完全に削除する場合は、この場所からフォルダを削除します。

マルチ ユーザー編集とソース コントロール

マルチ ユーザー編集システムには、サーバーがトランザクション履歴を保存する、競合を減らすために作業するアセットでのロックをユーザーが獲得するなど、ソース コントロール システムと同様の機能がいくつか用意されています。しかし、 マルチ ユーザー編集はソース コントロールの代わりにはなりません

マルチ ユーザー編集は、プロジェクトに対する変更を定期的に記録する Perforce、SVN、Git などの専用ソース コントロール システムを使用した標準共同ワークフローを強化するために使用するのに最適です。

Perforce を使用している場合、UnrealGameSync (UGS) を使用してこのプロセスを簡単にすることもできます。詳細については、UGS のドキュメントを参照してください。

チームでこれらのバージョン コントロール システムがセットアップされているときは、特定の変更リストをベースに、一定期間のライブ共同作業に対してマルチ ユーザー編集を使用します。

  • 各ライブ セッション (撮影、日常作業、レビュー ミーティング、チームで実行する作業に適用されるもの) の開始時に、すべての参加者は、開始する (一般に最新の) 変更リストを決定し、そのリビジョンに同期します。

  • ライブ セッションの終了時に、1 人のユーザーが変更をチームの通常のソース コントロール システムにコミットして、保持します。

  • セッションからソース コントロールに変更をコミットした後は、セッションを削除できます。すでに必要がないからです。

  • 次にライブ作業の必要があるとき、最新の変更リストに基づいて新しいセッションを開始します。

単一のマルチ ユーザー編集セッションを長い時間 (日、週単位で)、使用したままにすることはお勧めしません。停止して、変更を定期的にソース コントロールにコミットします。

Unreal Editor UI のソース コントロール プロバイダへの接続については、「Unreal Engine 4 におけるコラボレーション」および「ソース コントロール」を参照してください。

ネットワーキング

ライブで実行するとき、Unreal Editor のインスタンスは選択したサーバーに UDP でポート 6666 に接続します。

  • サーバーに接続する Unreal Editor を実行している各コンピュータはサーバー コンピュータのプライベート IP アドレスを認識できることが必要です。

  • サーバー コンピュータでは、ポート 6666 を、ローカル ネットワークからの UDP トラフィックに対して開く必要があります。

この接続はローカル エリア ネットワーク (LAN) に対して、あるいはエンドポイント間に仮想プライベート ネットワーク (VPN) がある場合は VPN に対して動作するだけでかまいません。オープン インターネット接続で Unreal Editor セッションを共有 しない でください。

「入門編」の手順は単純な LAN で設定し実行するためのものです。クライアントとサーバー間の接続を確立に問題がある場合は、Unreal Editor インスタンスとサーバーの UDP メッセージング設定を調整することができます。「マルチ ユーザー編集リファレンス」ページの「ネットワーキングの詳細設定」セクションを参照してください。

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信