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