質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1700閲覧

対戦カードゲームで相手プレイヤーが常に上にくるよう同期したい【PUN2】

massu2357

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

2クリップ

投稿2019/05/04 17:25

編集2019/05/05 05:57

Unity + PUN2(Photon Unity Networking 2)でネットワーク対戦カードゲームを作っています。

わかりやすいように、以下ではハースストーンのミニオンが出てきます。
(ミニオンの箇所はシャドウバースのフォロワーでも大丈夫です!)

実現したいこと

以下の図のようにゲームオブジェクトを同期させることが、実現したいことです。
プレイヤー①とプレイヤー②はそれぞれ対戦する人です。
PUNでは、ルームにプレイヤー①、②が入って対戦を行うイメージです。以下図のような状態で、対戦が進んでいくことを実現できないかなあと思っています。
イメージ説明

プレイヤー①から見れば、プレイヤー②(対戦相手)は画面上側にきます。
逆にプレイヤー②からすれば、対戦相手はプレイヤー①なので、プレイヤー①が上側にきて、もちろんプレイヤー②からプレイヤー①の手札は見えません。(ハースストーン、シャドウバースと同じ)

PUNにおけるPhotonNetwork.Instantiateを使ってオブジェクトの同期をとる場合、そのまま同期してしまうと、上の図ではプレイヤー①が召喚したミニオンは、プレイヤー②のミニオンの場所(図の右側における「プレイヤー②のミニオン」の場所)に同期されてしまいます。本来、プレイヤー①が自分のローカルで召喚したミニオンは、プレイヤー②から見れば、上側に表示されるべきなのです。

これって例えば、RPC(Remote Procedure Callを使って実装したりするんでしょうか??

試したこと/考えたこと

それぞれのプレイヤーに異なるカメラをつけて、それらのカメラの向きを変えることで、座標自体を反転させることを考えました。この方法は、座標は正しく同期されますが、これだと召喚されたミニオンのオブジェクト自体をカメラの向きに合わせて回転させてあげないと逆さまに見えてしまったりします。そこをミニオン生成と同時に修正するのはあんまりスマートじゃないかなあ、、、と思いました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

主にRPCでの実装になると思います。イメージで言うと、
0. プレイヤー1からサーバーへ:「手札N番を使用した」という情報のみ通信
0. サーバー:「プレイヤー1の手札N番はミニオンAである」と判断(不正防止の為に多分ここでのチェック入ると思われる)
0. サーバーから各プレイヤーへ:「プレイヤー1が手札N番を使用しミニオンAを召喚した」という情報のみ通信
0. 各プレイヤー:「プレイヤー1が手札N番を消費・ミニオンAのオブジェクト生成・ミニオンAが場に出て来る演出」等をローカル側で行う(ネット同期しない)

という感じじゃないかなと思います。

もしくは、
PhotonNetwork.Instantiateを使いつつ、位置や回転情報は同期しないという方法でもいいかもしれません。
Photon Unity Networkingで動的に同期オブジェクトを生成する方法 - Qiita

投稿2019/05/07 01:38

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

massu2357

2019/05/07 11:37

ご回答ありがとうございます。 承知致しました。やはりRPCでの実装が良いのですね。 プレイヤー1、プレイヤー2がルーム内で割り当てられているプレイヤーIDなどがあるかと思うので、そのIDを使えば、サーバ(PUNなので、プレイヤー間を仲介するPhoton Cloudでしょうか)を介して相手側にRPCメソッドが要求された時に、上側(相手プレイヤー)、下側(自分)どちらを対象に処理すべきなのかが判定できそうです。 これであれば、カメラの回転などは不要かなと感じました。 アドバイス頂きありがとうございます。 一度実装できそうなところまで試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問