UE4:ver.4.6.1
接続完了時の同期 †
- 「GameMode」BPの「Post Login」イベントが飛んでくる。
- 自分自身の起動に対しても飛んでくるので、サーバー+クライアント総数の分だけ呼ばれる。
- 呼ばれる順番はクライアントによって違うので、0番目がサーバー、もしくは自分自身とは限らない。
Character BPの同期 †
- 特に何もしなくても勝手に内部パラメーターを同期してくれる。
- Transformとか。
- アニメーション用の変数等、自前実装の物は自分で送信しないといけない。
変数の同期 †
- BP変数の詳細欄「複製」の項目で同期を行える。
- None : 無し。そのクライアントのみの変数。
- Replicated : 変数を同期する。
- RepNotify : 変数を同期する。設定すると関数欄に「On Rep <変数名>」の関数が追加される。同期時にコールバックとして関数が呼ばれる。
イベントの送受信 †
- カスタムイベントの「詳細」欄、「グラフ」-「複製する」の項目で同期設定を変更できる。
- 複製できませんでした : 無し。そのクライアントのみにコールバック。
- マルチキャスト : サーバーから全クライアントへ送信。
- サーバーで実行 : クライアントからサーバーへ送信。
送信範囲 †
何かマシな方法ありそうな気がするけど、自分の実装で調べた範囲で。
- サーバー、クライアントA、クライアントBの3台接続を考える。
- 送信者=変数を持っている側、カスタムイベントを実行した側。
変数 †
- 変数のReplicated。
送信者 | 受信者 | 結果 |
サーバー | クライアント | 同期される |
クライアント | サーバー | 同期されない |
クライアント | クライアント | 同期されない |
- クライアントA側の数値を変更しても、サーバー側マシンのクライアントAの数値は変更されていないっぽい。
- サーバーで変更した数値しか同期されないっぽい
イベント †
- マルチキャスト
送信者 | 受信者 | 結果 |
サーバー | クライアント | 同期される |
クライアント | サーバー | 同期されない |
クライアント | クライアント | 同期されない |
- サーバーからクライアントにしかイベントを投げれない
- サーバーで実行
サーバー | クライアント | 同期されない |
クライアント | サーバー | 同期される |
クライアント | クライアント | 同期されない |
- クライアントからサーバーへしかイベントを投げれない
全マシンで同期する †
- 上記から1発で全クライアント同期できない気がする。
- ひとまず下記で全マシンで変数を同期できる。
- クライアントはまず「サーバーで実行」(この時に変数投げてもいいかも)
- サーバー側なら「マルチキャスト」で全クライアントに。
- クライアント側からサーバー側がイベント受け取った場合も、そのままマルチキャストで流す。