x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

ネットワークを介して、クライアント側からプレイヤーを動かせない

ネットワークを使った四人対戦のRTSのようなゲームを作っています。ユーザが持つプレイヤーは複数に分裂でき、それらの情報はGameStateで管理しています。

四人それぞれが自分の分裂出来るプレイヤーを操作出来るようにはしたのですが、Listenモードのホストが動かしたプレイヤーは全ユーザに同期されるのですが、クライアントから動かしたプレイヤーの同期が働きません。 仕様上おかしなことをしているのか、そもそも動くように作れていないのか、経験が浅く困惑してしまっています。以下に試した方法を記します。

Character型のプレイヤー四人分をレベルに配置。Replicateのチェックは全て入れ、Replicate Movement等の設定も確認した

GameStateにて移動を制御している

以前はSimpleMoveToLocationで移動させていたが、ネットワーク越しではうまく動作しないと判明し、AddMovementInputが良いというような記述を見かけたのでそちらを試す

AddMovementInputでクライアント側からは動かせたが、ホスト側に同期はされなかった

RunOnServerで処理させようとしたが、カスタムイベント自体がうまく動作しなかった

イベントの飛ばし方や設定が悪いのか、分かるところは試したつもりですが、これ以上分からないといった状況です。プレイヤー情報の同期にはどういった方法があるのでしょうか…

Product Version: UE 4.10
Tags:
more ▼

asked Jul 15 '16 at 10:05 AM in Blueprint Scripting

avatar image

Bluesky3983
7 2 3 5

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

1 answer: sort voted first

こちらは全て読まれましたか?

https://docs.unrealengine.com/latest/JPN/Gameplay/Networking/index.html

https://docs.unrealengine.com/latest/JPN/Resources/Showcases/BlueprintMultiplayer/index.html

https://docs.unrealengine.com/latest/JPN/Gameplay/Networking/Blueprints/index.html

また私自身が過去に発表したスライドも役に立つかと思います。

http://www.slideshare.net/masahikonakamura50/cue4

基本的Client to Serverの場合にはカスタムイベントのRun On Serverを用いて、変数の内容を同期させる必要があります。また使用しているデフォルトクラスによってネットワーク対応度も違い、Pawnクラスはネットワーク同期に対応せず、Characterクラスであればネットワーク同期に標準で対応済みです。

ChatacterクラスであればAI Move Toなどのノードも上手く動作できるはずです。

more ▼

answered Aug 01 '16 at 11:54 PM

avatar image

alwei STAFF
3k 126 19 55

avatar image alwei STAFF Aug 02 '16 at 02:02 AM

一番気になっているのがGameStateから移動を制御しようとしていることです。アクターには権限があり、権限をもっていないものをカスタムイベントでRPCの呼び出しを行っても上手くいかないはずです。

まずGameStateで移動を制御しようというところが一番気になっています。

avatar image Bluesky3983 Aug 02 '16 at 02:53 AM

やはりGameStateで移動制御はまずいですよね・・。 現在はGameStateで、入力を判別して各プレイヤーに動作を振り分けているのですが、この部分をCharactorに飛ばして、そこからRunOnServerで同期させる、という方法にした方がよいのでしょうか。

avatar image alwei STAFF Aug 02 '16 at 03:52 AM

はい。おそらくGameStateではなく、Characterに一度情報を投げてからRPCでの同期行う必要があります。GameState自体はクライアント上にも存在しているので、ローカル情報を扱うことができると思いますが、RPCの送信にも対応していたかは何とも言えないところです。

avatar image Bluesky3983 Aug 02 '16 at 07:23 AM

GameStateから選択しているCharacterに投げ、その中でRunOnServerに飛ばすイベントを動かしてみたところ、RunOnServerの直前までは問題なく走るのですが、RunOnServerにしたイベントが動きませんでした。この構造ではまずかったでしょうか・・・それともまた別の問題なのでしょうか・・

character.png (122.6 kB)
gamestate.png (72.6 kB)
log.png (50.8 kB)
avatar image alwei STAFF Aug 02 '16 at 07:59 AM

ゲームの仕様をみて思ったのですが、分裂というのは誰がそのアクターの権限をもっているのでしょうか?

基本的にSpawnを行ったそのサーバーもしくはクライアント自身がアクターの権限を持ちますが、サーバー以外の場合には自動的に同期されず、RPCによる同期が必要です。またPlayerController、もしくはPlayerStateによるオーナーシップがなければRun On Server自体が発動しません。以下はドキュキメントからです。

オーナーシップ

レプリケートしたイベントを含むマルチプレイヤー ゲームを作業時の重要な概念は、指定アクタまたはコンポーネントのオーナーとみなされる 接続はどれかという点です。目的を果たすために、"Run on server" イベントはクライアントが所有するアクタ (またはアクタのコンポーネント) からだけ呼び出せることに留意してください。通常は以下のアクタまたはアクタの 1 つのコンポーネントからのみ "Run on server" イベントを送信できることを意味します。

クライアントの PlayerController 自身

クライアントの PlayerController が所有するポーン、または

クライアントの PlayerState

https://docs.unrealengine.com/latest/JPN/Gameplay/Networking/Blueprints/index.html

avatar image Bluesky3983 Aug 02 '16 at 12:43 PM

再確認したところ、アクターの権限の点について、統一されていなかったり、不適切な箇所が確かにいくつかありました。資料を参考にしながら 構造を考えなおしてみます。 解決の糸口が見えてきました。ありがとうございます!

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question