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

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

Choose your operating system:

Windows

macOS

Linux

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

Multi-User Editing network server and clients

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

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

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

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

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

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

レベルInstant Sync

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

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

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

その他のアセット:Sync on Save

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

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

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

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

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

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

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

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

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

前に示したシーケンサでの UI 同期を有効にするには、 コンソール コマンド Concert.EnableOpenRemoteSequencer を使用します。詳細については、 Multi-User Editing Reference コンソール コマンド セクションをご参照ください。

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

プレゼンス

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

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

位置と視点

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

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

Multi-User Editing desktop avatars

Multi-User Browser ウィンドウの [Connected Clients (接続クライアント)] パネルのコントロールで、このプレゼンス情報をいつでも調整できます。

Multi-User Editing Connected Clients panel

アイコン

説明

Teleport to user's point of view

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

Toggle presence visibility

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

あるいは、接続ユーザーに対して用意されている [Level] をクリックすれば、そのレベルに切り替わり、ユーザーの位置と視点にただちにテレポートすることができます。

セッションの変更履歴

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

Session change history

アセットの変更履歴

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

Asset change history

コンフリクトを回避する

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

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

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

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

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

アセットをロックする

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

アセットのロック/ロック解除方法は 2 通りあります。

  • ロックされていないアセットの修正作業を開始すると、変更を保存するまでアセットは一時的にロックされます。

  • 修正作業を行わずに、アセットをロック/ロック解除することもできます。 コンテンツ ブラウザ [Multi-User (マルチ ユーザー)] > [Lock Asset(s) (アセットのロック)] または [Multi-User (マルチ ユーザー)] > [Unlock Asset(s) (アセットのアンロック)] を選択します。

    Lock and unlock Assets

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

Asset locks and dirty flag

オーバーレイ

説明

Locked by you

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

Locked by someone else

オレンジ色は別のユーザーがアセットをロックしたことを示します。このアセットをプロジェクトでローカルに修正することができます。その場合、他のユーザーによってロックされていることが通知されます。

ロックのオーナーが解放するまで、変更を保存して、他のユーザーと変更を同期することはできません。

Modified but unsaved on another computer

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

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

アンドゥとリドゥ

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

共通の状態から開始する

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

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

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

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

セッションの検証

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

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

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

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

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

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

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

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

Persist Session Changes from the Toolbar

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

変更を保持せずに 所有している セッションを終了すると、変更の保持を求められます。変更を保存せずにセッションをうっかり終了してしまう事故を防ぐことができます。このプロンプトをキャンセルしたとしても、保留中の変更を永遠に失うことはありません。いつでもセッションに戻り、後で変更を保持することができます。シャーバーがシャットダウンした場合、セッション中の変更は失われます。詳細は次の章をご参照ください。

冗長性

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

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

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

  • サーバーを正常にシャットダウンした場合、すべてのライブ セッションがアーカイブされます。アーカイブからセッションを後で復元できます。詳細については、次のセクションをご参照ください。

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

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

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

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

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

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

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

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

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

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

Unreal Editor UI のソース コントロール プロバイダへの接続については、 Unreal Engine 4 におけるコラボレーション および

[ソース コントロール](Basics/SourceControl)
を参照してください。

インゲーム モードを起動する

-game コマンドライン オプションを使ってプロジェクトを起動する場合、 -messaging オプションを含める必要があります。このオプションは、Multi-User Editing システムのコンポーネントが内部でお互いに通信するために使用する MessageBus システムを有効にします。

ネットワーキング

セッションに参加するには、Unreal Editor のインスタンスは UDP でポート 6666 に接続します。

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

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

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

「入門編」の手順は単純な LAN で設定し実行するためのものです。クライアントとサーバー間の接続を確立に問題がある場合は、Unreal Editor インスタンスとサーバーの UDP メッセージング設定を調整することができます。 Advanced Multi-User Networking をご参照ください。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる