ユーザーは「アクタの所有接続」についてこれから何度も耳にすることでしょう。最終的に各接続には、それぞれの接続専用に作成された PlayerController があります (クライアント接続フローでこのプロセスの詳細を参照)。このために作成される各 PlayerController は、対象となる接続が所有するものです。一般的に、接続がアクタを所有しているかを特定するには、アクタの一番外側のオーナーに対してクエリを実行します。オーナーが PlayerController の場合は、その PlayerController を所有するのと同じ接続にそのアクタも所有されていることになります。
例として Pawn アクタが PlayerController で所有されている場合が挙げられます。オーナーはこのアクタを所有している PlayerController になります。この間、アクタは Playercontroller の接続によって所有されます。PlayerController によって所有されている間は、ポーンはこの接続のみに所有されます。PlayerController によるポーンの所有が終了すると、接続によるポーンの所有も終了します。
もう 1 つの例として、ポーンが所有するインベントリ アイテムが挙げられます。これらのインベントリ アイテムは、ポーンを所有している可能性がある接続と同じ接続 (ある場合) に所有されます。
コンポーネントについては、その所有接続を特定するのにやや特殊な方法が使用されます。この場合、所有するアクタが見つかるまでコンポーネントのアウター チェーンを 1 つずつ確認し、コンポーネントのオーナーを判断します。その後、このアクタの所有接続を特定するために上記の動作を継続します。
接続のオーナーシップにはいくつか重要な点があります。
- RPC が run-on-client (クライアントで実行) RPC を実行するクライアントを特定
- アクタのレプリケーションと接続の関連性
- オーナーが関係しているときの Actor プロパティのレプリケーション条件
アクタで RPC 関数を呼び出す際 (RPC がマルチキャストとマークされていない限り)、RPC を実行するクライアントを把握する必要があるため、接続のオーナーシップは重要となります。所有接続を検索して、RPC を送信する接続先を特定します。
アクタのレプリケーション中に接続のオーナーシップを使用して、各アクタについて更新される接続を特定します。bOnlyRelevantToOwner が true に設定されているアクタは、アクタを所有する接続のみがこのアクタに対するプロパティ更新を受け取ります。すべての PlayerController にこのフラグがデフォルトで設定されているため、各クライアントは自身が所有する PlayerController に対する更新のみを受け取ります。さまざまな理由からこれが行われますが、主な理由はプレイヤーの不正行為を防止し、効率性を実現するためです。
接続のオーナーシップは、オーナーを利用する条件付きのプロパティ レプリケーションの際に重要です例:COND_OnlyOwner
を使用すると、このアクタのオーナーのみがプロパティ更新を受け取ります。
最後に、所有接続は自律的なプロキシのアクタに重要です (役割は ROLE_AutonomousProxy
)。これらのアクタについては、これらを所有しない接続にプロパティがレプリケートされ、役割が ROLE_SimulatedProxy
に格下げされます。