オブジェクト参照のレプリケーション

オブジェクト参照プロパティをレプリケートする方法

Choose your operating system:

Windows

macOS

Linux

一般的に、オブジェクト参照は UE4 マルチプレイヤーフレームワークで自動的に処理されます。これはレプリケートされた UObject プロパティがある場合、このオブジェクトへの参照がサーバーで割り当てた特別な ID としてネットワーク上に送信されることを意味します。この特別な ID は FNetworkGUID です。サーバーがこの ID の割り当てを管理して、後にこの割り当て状況をすべての接続先クライアントへ通知します。

オブジェクト参照をレプリケートするには、以下のように UObject プロパティを「replicated」とマークします。

class ENGINE_API AActor : public UObject
{
    UPROPERTY( replicated )
    AActor * Owner;
};

この場合は、「Owner」プロパティがこのプロパティが参照するアクタへのレプリケートされた参照になります。

オブジェクトをネットワーク上で正式に参照するには、オブジェクトがネットワーキングでサポートされていなくてはいけません。サポートは、 UObject::IsSupportedForNetworking() を呼び出して確認します。通常は低レベル関数と考えられるため、ゲームコードのチェックは必要ありません。

一般的に、以下はネットワーク上のオブジェクトを参照できるかどうかの判断基準となるガイドラインです。

  • レプリケートされたアクタは参照としてレプリケートすることができる

  • レプリケートされていないアクタには安定性のある名前をつけなくてはならない (パッケージから直接ロード)

  • レプリケートしたコンポーネントは参照としてレプリケートすることができる

  • レプリケートされていないコンポーネントには安定性のある名前をつけなくてはならない

  • 他のすべての UObjects (非アクタまたはコンポーネント) はロードしたパッケージから直接利用しなくてはならない

安定性のある名前がつけられたオブジェクト

安定した命名がされているオブジェクトとは、サーバーとクライアント両方に存在するオブジェクトで、名前が完全に一致します。

パッケージから直接ロードされたアクタは安定性のある名前がつけられます (ゲームプレイ中のスポーンではなく)。

コンポーネントは以下の条件下で安定した命名がされます:

  • パッケージから直接ロードされた場合

  • シンプルなコンストラクション スクリプト経由で追加された場合

  • 手動でマークされた場合 ( UActorComponent::SetNetAddressable 経由)

    • サーバーとクライアント両方で同じ名前のコンポーネントにするために、手動で名前を付ける時だけ使用します (わかりやすい例は AActor C++ コンストラクタに追加したコンポーネント)

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