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

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

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

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

Unity

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

Q&A

解決済

1回答

7412閲覧

unityのphotonのOnPhotonSerializeView()のデータ送信について

kaji

総合スコア648

C#

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

Unity

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

0グッド

0クリップ

投稿2017/10/17 00:44

編集2017/10/17 19:13

unityのphotonのOnPhotonSerializeView()のデータ送信について
データ送信を以下の通り絶えず送り続けているのですが、
イメージ説明

photonの同期はこのように常に送り続けるものなのでしょうか?

自分としては数値が変わったときのみ送信されるのかと思ってるのですが。
これが本来の動きなのかどうかのかを知っている方いましたら教えて欲しいです。

公式では
https://doc.photonengine.com/ja-jp/pun/current/getting-started/feature-overview
更新分だけ送ると書いてある気がします。

ObserveOptionはUnreliable on Changeになっています。

以下のようにデータを送ってます。

#PhotonManager.cs

GameObject member = PhotonNetwork.Instantiate ("Member", new Vector3 (0.0f, 0.0f, 0.0f), Quaternion.Euler(Vector3.zero),0); member.name = "Member"+member.GetComponent<PhotonView>().ownerId;

#MemberScript.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; public class MemberScript : Photon.MonoBehaviour { public string str = "hoge"; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void Awake() { this.name = "Member"+GetComponent<PhotonView> ().ownerId; } void OnPhotonSerializeView( PhotonStream stream, PhotonMessageInfo info ) { if (stream.isWriting) { Debug.Log ("member isWriting="+str); //データの送信 stream.SendNext(str); } else { Debug.Log ("member isread="+str); //データの受信 this.str = (string)stream.ReceiveNext(); } } }

MemberObjectのinspector
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

確か、OnPhotonSerializeViewは毎フレーム呼ばれて、その中で書き込みがあったら送られる、という仕様だった気がします。

コード例だと必ずデータを書き込んでしまっているので、毎回送られているのではないでしょうか?

投稿2017/10/17 00:49

edo_m18

総合スコア2283

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

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

kaji

2017/10/17 19:01

変更してないにもかかわらず毎回更新処理が実行されてしまいます。 OnPhotonSerializeViewが毎回実行されstream.isWritingがtrueで処理されているようです。 ソース全体をのせました。 ソース上のstrはそのほかの部分からは一切変更していません。 MemberObjectはデータの格納のために用意したもので、 座標の移動なども一切していません。
kaji

2017/10/20 07:10

確実に変数は変更してないにもかかわらず、 以下は処理されてしまうので、 Debug.Log ("member isWriting="+str); stream.SendNext(str); 自分の中で以下のように理解することにしました。 上記は毎回処理されるが、 stream.SendNext()の内部でデータの差分を判定し、 差分のみリモートユーザに転送される。 edoさん、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問