🔰

【Photon Fusion】共有モードのチュートリアル

に公開11
Photon運営事務局TechBlog

Discussion

炉田謙 KenRoda炉田謙 KenRoda

良質なチュートリアルをありがとうございます。

質問です。
SessionNameを指定していないように見えるのですが、ここのチュートリアルではデフォルトのルームに入室しているイメージでしょうか。また、ルーム(セッション)名を指定したい場合はどうすれば良いのでしょうか?よろしくお願いいたします。

o8queo8que

StartGameArgsで、

  • SessionNameを設定すると、指定したセッション名のセッションの作成/参加を試みる
  • SessionNameを設定しないと、ランダムなセッションの作成/参加を試みる

という感じです。この記事では説明の簡単のために省略しているので、詳しくは以下のドキュメントが参考になるかと思います!

https://doc.photonengine.com/ja-jp/fusion/current/manual/matchmaking

炉田謙 KenRoda炉田謙 KenRoda

前回の回答を参考に進めていますが、補完とPhotonに関して質問がございます。

位置情報のアップロード・ダウンロードのFrequencyについて教えていただきたいです。また、これがアプリのFPSやディスプレイのHZとどのように関連しているのか知りたいです。
補完のFrequencyに関する情報も教えていただきたいです。これもアプリのFPSやディスプレイのHZとの関係を知りたいと思っています。
それぞれ、可能であれば変更方法を知りたいです。

Meta Quest2での実装の結果、フレームレートが60HZのように感じます。しかし、Quest2の120HZのディスプレイでは表示が不自然に見えることがあります。それに対して、60HZのエディター上では補完がしっかりと行われているようです。
よろしくお願いいたします。

o8queo8que

Fusionのシミュレーションの頻度(ティックレート)は、NetworkProjectConfigの「Simulation > TickRate」から設定できます。ティックレートとフレームレートは独立していて、スナップショット補間はフレーム単位で行われるので、頻度はフレームレートと同じという感じです。

ティックレートのデフォルトは60Hzなので、フレームレートが60Hzの場合に正常・それ以外の場合に不自然なら、そもそも補間が機能していない可能性があるので、まず補間の設定が正しく出来ているか見直してみると良さそうです。

あと、記事の内容に直接関係のない個別の質問等は、公式のお問い合わせフォームから聞いてもらえると助かります!

N4N4

「2プレイヤー間での、変数の共有」を、このサンプルを参考にして試行錯誤しています。

最もシンプルな実験として
・String型変数testを、2プレイヤーのどちらでも参照、編集する
ことを目指しています。
つまり
・変数testは、最初は空文字列
・どちらのプレイヤーも、一回画面クリックすると、testに"added"を追加する
・よって、各プレイヤーが1回ずつ画面をクリックすると、testは"addedadded"になるようにしたい
というものです。

今やってみたのは、サンプルのPlayer_Avatorスクリプトに変数testを追加し
public class Player_Avator : NetworkBehaviour
{

public string test = "";

GameLauncher.csに
//Spawn結果をavaに格納
public NetworkObject ava;
private async void Start()
{

ava = networkRunner.Spawn(playerAvatarPrefab, spawnPosition, Quaternion.identity, networkRunner.LocalPlayer);

}
public void add()
{
ava.GetComponent<Player_Avator>().test += "Added";
}

とやってみましたが、各プレイヤーが画面クリックし上記add()を1回ずつコールしても
Debug.Log(glauncher.GetComponent<GameLauncher>().ava.GetComponent<Player_Avator>().test);
として内容を確認すると、"added"は一個しか追加されていません=変数testの内容は、2プレイヤー間で共有されているのでなく、プレイヤーごとに独立しています。

test変数を、Player_Avatorクラスのstatic変数にしても同じ結果でした。

もう少し変えれば、うまくいくのでしょうか?

それとも、そもそも、この記事の「NETWORK OBJECT」の用途は、上記のような「変数の共用」という目的とは全然違うもので、まったく別の勉強が必要なのでしょうか?

o8queo8que

まず、ネットワーク上で同期したい変数はネットワークプロパティ、関数はRPCで定義する必要があります。(NetworkBehaviourに追加した変数やメソッドが、自動的にいい感じに同期される訳ではないことに注意してください)
また、上記のコードでは、ネットワークオブジェクトのインスタンスはプレイヤー毎に生成されているので、変数の値の更新やメソッドの実行は各インスタンスに対して行われます。プレイヤー間で変数を共有をしたいなら、「共有用のネットワークオブジェクトをシーン上に一つだけ生成する」等の実装も必要になるかと思います。

実装例については、以下の記事も参考にしてみてください!
https://zenn.dev/o8que/articles/afe59cfb76404b

あと、他の方の質問へのコメントでもお願いしているのですが、記事の内容に直接関係のない個別の質問等は、公式のお問い合わせフォームから聞いてもらえると助かります!

N4N4

回答ありがとうございます。

すみません、実は「記事の内容に直接関係のない」かすら、あまり把握していなかったのですが、やはりこの記事のアバター同期とはかなり別の技術のようですね。

公式のお問い合わせフォーム
たびたびお手数ですが、こちらの場所はどちらになるでしょうか?

https://zenn.dev/p/photon_japan

こちらのトップページには、リンクが見つからなかったので。

o8queo8que

技術ブログのトップページのヘッダーにPhoton公式サイトへのリンクが、Photon公式サイトの下部にお問い合わせへのリンクがあります。

N4N4

ありがとうございます。見つかりました。