ネットワークを利用したゲーム制作をしています。
キャラクターにWidgetComponentとしてHPバーを実装したのですが、サーバー側のキャラがHP減少するとクライアントのキャラのHPも減少してしまいます。その逆も起きています。
不思議なのが、HPを管理する変数をレプリケートしており、キャラクターに追加していない画面に表示するWidgetに関しては、サーバーから受けた攻撃がクライアントに送信されてクライアントのHPが減少するといった処理はうまく動いてます。
そのレプリケートしているHPの変数を同じように、WidgetComponentで取得しキャラに追加しているのですが、こちらですと上記のような現象が起きて、サーバー側のHPが減るとクライアントのHPが減少してしまいます。
各CharacterにAttachしたWidgetComponentのBindがすべて画像のとおりだと、まずうまくいきません
画像のノードをそのまま解釈すると どのキャラクターに付いていても、PlayerIDが0のCharacter(LocalPlayer)のHPを参照 することになります
Get Player Character(PlayerIndex=0)
とはそういうノードです
今の事象を簡単に説明すると、どのCharacterに付いているWidgetも、LocalPlayer(自分)のCharacterのHPを参照している状態になっています
RemoteのCharacterのHPは一切参照していません
ですので、各Characterに対してWidgetComponentとしてAttachするのであれば、それぞれHP表示する対象を、変数を使ってWidgetBPに渡す必要があります
Replicationはうまくいっているとのことですので、そこだけ直せば動作するでしょう
BeginPlayまたはConstructionScriptのタイミングでWidgetComponentの変数にCharacterの参照を渡す、というのが一番手軽な実装方法です
ご回答ありがとうございます!
BeginPlayまたはConstructionScriptのタイミングでWidgetComponentの変数にCharacterの参照を渡す、というのが一番手軽な実装方法です
すみません。素人で申し訳ないのですが、具体的にはどのノードを使ってお互いの対象(サーバー、クライアント?)に渡せばいいんでしょうか、、。
サーバとかクライアントとかは特に意識する必要はありません
UI等のレンダリングはあくまでも各クライアントPC内の処理です
まずは、 PlayerのCharacterのHPを表示するUI
ではなく Level上にいるCharacterのHPを表示するUI
として作ってみてください
CharacterにWidgetComponentをAttachし、Character自身の参照を渡すだけです
そして画像の GetPlayerCharacter
の部分は、そのCharacterの参照変数に変えます
そこまでできれば、この問題は解決しているはずです
いつもご回答頂きありがとうございます。
自身から見たplayercharactorのHPしか参照していない為、level上にいるcharacterのHPを表示するUIとして作成しなければならない事は理解できたのですが実際の実装の仕方について
自分なりに考えても分からなかったのでお恥ずかしい限りですが、以下の具体的な手順を頂けると助かります。
CharacterにWidgetComponentをAttachし、
こちらは、characterにWidgetComponenを追加するという意味でしょうか?
Character自身の参照を渡すだけです
characterのリファレンスをWidgetComponentに渡すのでしょうか?
リファレンスを取得する(cast)方法しかわからず、渡す方法の具体的な手法を教えてもらえると助かります。
そして画像の GetPlayerCharacter の部分は、そのCharacterの参照変数に変えます
こちらも上の二つが理解できていない為、どうしたらいいのかわからない状況です。
Syogo
(Shogo)
January 7, 2020, 10:00am
6
実際の実装方法でなやまれているようでしたので、雑ではありますが、作成してみました。
ご参考になれば幸いです。
キャラクターにWidgetComponentをとりつけて、ゲーム開始時に、Widgetへ取り付けたキャラクター自身(Self)の情報を送っています。
あとはWidget側からそのキャラクターのHP(変数)を取得すれば、PlayerIndexなどの取得の必要はありません。
実際の実装方法まで載せて頂き本当にありがとうございます!!
こちらをみてようやく理解ができました!
ありがとうございます!