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++ コンストラクタに追加したコンポーネント)
-