久しぶりの記事更新ですね(;’∀’)
今回は、UnrealEngineのComponentのReplicateに関してです。
UEのレプリケート機能に関しては、公式や、他のユーザーさんも沢山記事を書かれてますので、それはそちらにお任せして…w
レプリケート機能、解りやすいようで、結構ハマりやすい機能なので、説明に時間かかるんですよ…w
あ、そうそう。
前提として、間違っていることを書いている可能性もあるので、そのあたりはご了承下さいませ(;’∀’)
静的コンポーネントと動的コンポーネント
まず、コンポーネントに関しては、静的コンポーネントと動的コンポーネントがあります。
静的コンポーネントとは、ブループリントアクターをエディタで開いた際、左上に表示されるコンポーネントツリーに追加するコンポーネントの事です。
大抵の場合、そのActorで必要となるコンポーネントはあらかじめ解っているはずなので、ほとんどの場合は、静的に追加されるはずです。
動的コンポーネントは、プログラム実行中に、必要に応じて、そのActorに追加/削除されるコンポーネントの事です。
例えば、状態異常的な処理を必要な時に追加し、不要になったら削除するといった使い方をするコンポーネントなどはこちらの方法で管理することになるかと思います。
静的コンポーネントのレプリケート
静的コンポーネントのレプリケートに関しては、公式ドキュメントにもありますが、基本的に紐付けたアクターがレプリケートされる際に、一緒にレプリケートされます。
逆に、コンポーネントだけレプリケートしたいというのは出来ません(…できないはず)。
動的コンポーネントのレプリケート
さて、やっと記事の本題です(;’∀’)
動的コンポーネントの場合も、基本的には紐付けるアクターの状態に影響されます。
例えば、アクターがレプリケートされる前に追加した場合は、アクターのレプリケート時に、一緒にレプリケートされますが、レプリケート済みのアクターに追加した場合は、そのコンポーネントはレプリケートされません。
とはいえ、レプリケート済みのアクター(例えばマルチプレイゲームでのプレイヤーなど)に、動的に追加したコンポーネントをレプリケートしたい状況というのは結構あります。
そこで必要となるのが、下記のノードです。
公式のドキュメントに記載はされているのですが、なんとなくさらっと触れられているだけで、これも使えます的な書き方しかされてないのですが、これを呼び出すことで、動的に追加したコンポーネントを能動的にレプリケーションすることが出来ます。
これの前に書かれているのは、静的コンポーネントに関しての情報なんですよね…。
所有権
静的コンポーネントであれ、動的コンポーネントであれ、レプリケート機能を使用する際、もっとも重要となるのが所有権です。
ほとんどの場合、レプリケートさせるコンポーネントは、サーバー側で所有(追加)する必要があります。
この辺りは、公式ドキュメントを読んで頂いた方が良いのですが、要は、クライアントから見えるのはサーバーだけで、クライアントAからクライアントBは、直接見えないのです。
最後に
今回の記事は、動的に追加したコンポーネントを通じて、複数のクライアントで情報を共有する機能を作成しようとして、かなり四苦八苦したので忘備録的に書きました。
レプリケート機能自体は、とても手軽にマルチプレイ機能を実装できるので便利なのですが、他の開発環境でのマルチプレイ環境とはだいぶ違うため、下手に別環境の知識があると戸惑うかと思います(自分もそのクチ)。
特に所有権の問題は、かなりこんがらかるので、注意が必要です(;’∀’)