ネットワーク対応ゲームプレイで、アクタの ロール と リモート ロール では、アクタの状態を変更したり、リモート プロシージャ 呼び出しを実行したりするための権限を持つマシンを決定します。 これらのプロパティを使用すると、マルチプレイヤー ゲームでアクタに関して以下の質問に答えることができます。
このアクタはレプリケートされますか?
誰がこのアクタに対して権限がありますか?
このアクタに対するレプリケーション ロールは何ですか?
アクタ ロールとリモート ロールは所有権と同じではありません! 詳細については、アクタとアクタの所有接続 を参照してください。
アクタのロールとリモート ロールを表示する
Unreal Editor の [Details (詳細)] パネルでアクタの現在のロールとリモート ロールを確認できます。
アクタのロールとリモート ロールは、C++ またはブループリントで取得することもできます。
アクタのロールを取得する
ローカル マシンがこのアクタに対してどの程度制御できるかを決定するには、AActor::GetLocalRole を呼び出します。
AMyActor* MyActor;
...
// Once you have a valid Actor pointer...
const ENetRole LocalRole = MyActor->GetLocalRole();
// LocalRole contains the Actor's Role
...アクタのリモート ロールを取得する
リモート マシンがこのアクタに対してどの程度制御できるかを決定するには、AActor::GetRemoteRole を呼び出します。
AMyActor* MyActor;
...
// Once you have a valid Actor pointer...
const ENetRole RemoteRole = MyActor->GetRemoteRole();
// RemoteRole contains the Actor's RemoteRole
...アクタ ロールの状態
アクタ ロールとリモート ロールは、ENetRole 列挙型クラスの状態によって表されます (EngineTypes.h で定義されます)。 以下の表では、これらの状態を示し、説明しています。
| ネット ロールの状態 | 説明 |
|---|---|
| ロールがありません。 このアクタはレプリケートされません。 |
| このアクタのシミュレートされたプロキシ。 このアクタは true 状態をシミュレートしますが、状態を変更したりリモート関数を呼び出したりする権限がありません。 |
| このアクタの自動プロキシ。 このアクタは true 状態をシミュレートし、状態を変更したりリモート関数を呼び出したりする権限があります。 |
| このアクタの正式な制御。 このアクタはネットワーキングお true 状態を保持していて、状態を変更したり関数を呼び出したりする権限があります。 このアクタは、プロパティの変更を追跡追跡し、これらを接続されたクライアントにレプリケートします。 |
クライアントサーバーのロールのマトリックス
Unreal Engine では、ネットワーキング用のクライアントサーバー モデルを使用します。 そのため、サーバーは常にレプリケートされたアクタに対する権限があります。 これは、レプリケートしたアクタに対して、サーバーのみが ROLE_Authority を確認できることを意味します。 レプリケートされていないアクタには、クライアント上に ROLE_Authority のローカル ロールと ROLE_None のリモート ロールがあります。
以下の表では、ローカル ロールとリモート ロールのマトリックス (このロールの組み合わせを監視するのがサーバーなのかクライアントか、およびこの組み合わせの意味) を示しています。
| ローカル ロール | リモート ロール | サーバーまたはクライアント | 説明 |
|---|---|---|---|
|
| サーバー | このアクタのポーンは接続されたクライアントのいずれかによって制御されます。 |
|
| クライアント | このアクタのポーンはこの接続されたクライアントによって制御されます。 |
|
| クライアント | このアクタのポーンは他の接続されたクライアントのいずれかによって制御されます。 クライアントによって制御されないレプリケートされたアクタには、このロールの組み合わせもあります。 |
|
| クライアント | これは、レプリケートされていないアクタです。 |
アクタのレプリケーションのシミュレーション
帯域幅と CPU リソースが過度に使用されるため、サーバーは更新ごとにすべてのアクタをレプリケートしません。 代わりに、サーバーは AActor::NetUpdateFrequency プロパティで指定された頻度でアクタをレプリケートします。 つまり、アクタの更新間でクライアントで一定の時間が経過します。 これにより、アクタでキャラクター移動コンポーネントが途切れ途切れで散発的に見えるようになる場合があります。 これを補正するには、クライアントは更新間でキャラクター移動をシミュレートします。
レプリケーションのシミュレーションとキャラクター移動の詳細については、キャラクター移動コンポーネントにおけるネットワーク移動 のドキュメントを参照してください。
ロールとリモート ロールのリファレンス
関数
| 名前 | 説明 |
|---|---|
別のアクタからリモート ロールをコピーし、必要に応じて、このアクタをネットワーク アクタのリストに追加します。 | |
クライアント上にある場合、ロールとリモート ロールを交換します。 | |
ローカル マシンがこのアクタに対してどの程度制御できるかを返します。 | |
このアクタに対してリモート マシンがどの程度制御できるかを返します。 | |
ロールのプロパティの名前を取得します。 | |
true の場合、このアクタは新しいクライアントにレプリケートされなくなり、レプリケートされていたクライアントで「torn off (除去)」されます ( | |
新しいロールがリモート マシンから受信された後、すぐに呼び出されます。 | |
リモート ロールを下位互換性のために設定する必要があるクラスのコンストラクタで使用されます。 | |
このインスタンスで他の副次的エフェクトが発生することなくロールの値を設定します。 | |
このアクタ ロールとリモート ロールを交換します。 注意が必要です。副次的なエフェクトを理解している場合にのみ、この関数を呼び出します。 |
プロパティ
| 名前 | 説明 |
|---|---|
ロールとリモート ロールがクライアント上で交換されているかどうか。 |