動的コンポーネントのレプリケーション

久しぶりの記事更新ですね(;’∀’)
今回は、UnrealEngineのComponentのReplicateに関してです。

UEのレプリケート機能に関しては、公式や、他のユーザーさんも沢山記事を書かれてますので、それはそちらにお任せして…w

レプリケート機能、解りやすいようで、結構ハマりやすい機能なので、説明に時間かかるんですよ…w

あ、そうそう。
前提として、間違っていることを書いている可能性もあるので、そのあたりはご了承下さいませ(;’∀’)

静的コンポーネントと動的コンポーネント

まず、コンポーネントに関しては、静的コンポーネントと動的コンポーネントがあります。

静的コンポーネントとは、ブループリントアクターをエディタで開いた際、左上に表示されるコンポーネントツリーに追加するコンポーネントの事です。

大抵の場合、そのActorで必要となるコンポーネントはあらかじめ解っているはずなので、ほとんどの場合は、静的に追加されるはずです。

動的コンポーネントは、プログラム実行中に、必要に応じて、そのActorに追加/削除されるコンポーネントの事です。

例えば、状態異常的な処理を必要な時に追加し、不要になったら削除するといった使い方をするコンポーネントなどはこちらの方法で管理することになるかと思います。

静的コンポーネントのレプリケート

静的コンポーネントのレプリケートに関しては、公式ドキュメントにもありますが、基本的に紐付けたアクターがレプリケートされる際に、一緒にレプリケートされます。

逆に、コンポーネントだけレプリケートしたいというのは出来ません(…できないはず)。

動的コンポーネントのレプリケート

さて、やっと記事の本題です(;’∀’)

動的コンポーネントの場合も、基本的には紐付けるアクターの状態に影響されます。

例えば、アクターがレプリケートされる前に追加した場合は、アクターのレプリケート時に、一緒にレプリケートされますが、レプリケート済みのアクターに追加した場合は、そのコンポーネントはレプリケートされません。

とはいえ、レプリケート済みのアクター(例えばマルチプレイゲームでのプレイヤーなど)に、動的に追加したコンポーネントをレプリケートしたい状況というのは結構あります。

そこで必要となるのが、下記のノードです。

公式のドキュメントに記載はされているのですが、なんとなくさらっと触れられているだけで、これも使えます的な書き方しかされてないのですが、これを呼び出すことで、動的に追加したコンポーネントを能動的にレプリケーションすることが出来ます。

これの前に書かれているのは、静的コンポーネントに関しての情報なんですよね…。

所有権

静的コンポーネントであれ、動的コンポーネントであれ、レプリケート機能を使用する際、もっとも重要となるのが所有権です。

ほとんどの場合、レプリケートさせるコンポーネントは、サーバー側で所有(追加)する必要があります。

この辺りは、公式ドキュメントを読んで頂いた方が良いのですが、要は、クライアントから見えるのはサーバーだけで、クライアントAからクライアントBは、直接見えないのです。

最後に

今回の記事は、動的に追加したコンポーネントを通じて、複数のクライアントで情報を共有する機能を作成しようとして、かなり四苦八苦したので忘備録的に書きました。

レプリケート機能自体は、とても手軽にマルチプレイ機能を実装できるので便利なのですが、他の開発環境でのマルチプレイ環境とはだいぶ違うため、下手に別環境の知識があると戸惑うかと思います(自分もそのクチ)。

特に所有権の問題は、かなりこんがらかるので、注意が必要です(;’∀’)

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください