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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

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

Q&A

解決済

1回答

3719閲覧

PUN2シーン遷移タイミングずれる

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2020/07/13 14:17

編集2020/07/13 14:29

実現したいこと

時間が決まっているゲームなので同じタイミングで始まらないと不利になるのでシーン遷移のタイミングを揃えたい

現状

unityの方(mac)とbuild(windows)した方で通信しているのですがunityの方が絶対に早く始まってしまう
PhotonNetwork.AutomaticallySyncScene = true;で同期している

該当コード

public class Online : MonoBehaviourPunCallbacks { private void Awake() { // シーンの自動同期 PhotonNetwork.AutomaticallySyncScene = true; } // Start is called before the first frame update void Start() { // PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する PhotonNetwork.ConnectUsingSettings(); } // Update is called once per frame void Update() { } public void OnPhotonPlayerConnected() { PhotonNetwork.LoadLevel("Online"); } public void OnMatching() { PhotonNetwork.JoinOrCreateRoom("N", new RoomOptions() { MaxPlayers = 2 }, TypedLobby.Default); } // ロビーに入る private void JoinLobby() { if (PhotonNetwork.IsConnected) { PhotonNetwork.JoinLobby(); } } // マスターサーバーに接続した時 public override void OnConnectedToMaster() { Debug.Log("OnConnectedToMaster"); // ロビーに入る JoinLobby(); } // ロビーに入った時 public override void OnJoinedLobby() { Debug.Log("OnJoinedLobby"); } // ロビーから出た時 public override void OnLeftLobby() { Debug.Log("OnLeftLobby"); } // 部屋を作成した時 public override void OnCreatedRoom() { Debug.Log("OnCreatedRoom"); } // 部屋の作成に失敗した時 public override void OnCreateRoomFailed(short returnCode, string message) { Debug.Log("OnCreateRoomFailed"); } // 部屋に入室した時 public override void OnJoinedRoom() { Debug.Log("OnJoinedRoom"); // 自身がルームに参加した時に満員になったら、以降そのルームを参加拒否設定にする if (PhotonNetwork.CurrentRoom.PlayerCount == PhotonNetwork.CurrentRoom.MaxPlayers) { PhotonNetwork.CurrentRoom.IsOpen = false; } } // 特定の部屋への入室に失敗した時 public override void OnJoinRoomFailed(short returnCode, string message) { Debug.Log("OnJoinRoomFailed"); } // ランダムな部屋への入室に失敗した時 public override void OnJoinRandomFailed(short returnCode, string message) { Debug.Log("OnJoinRandomFailed"); // ランダムに参加できるルームが存在しないなら、新しいルームを作成する PhotonNetwork.CreateRoom(null); } // 部屋から退室した時 public override void OnLeftRoom() { Debug.Log("OnLeftRoom"); } //他のプレイヤーが入ってきたら public override void OnPlayerEnteredRoom(Player newPlayer) { Debug.Log("OnMaxRoom"); PhotonNetwork.LoadLevel("Online"); } //他プレイヤーが退出したら public override void OnPlayerLeftRoom(Player otherPlayer) { } }

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

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

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

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

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

y_waiwai

2020/07/13 14:18

で、しつもんはなんでしょうか
退会済みユーザー

退会済みユーザー

2020/07/13 14:28

シーン遷移のタイミングを同じにしたいです
guest

回答1

0

ベストアンサー

PhotonNetwork.automaticallySyncScene は、マスタークライアントがシーンをロードしたら、それ以外のクライアントも同じシーンをロードするという意味で、同時にシーンをロードするという意味ではありません。
ネットワークで同時に「シーンをロードする」ことは原理的に不可能です。ネットワークも PC 性能も、ビルドしたものとエディタでは処理速度も変わります。

次善の策としては、シーンをロードする前にゲームを開始する時刻を指定し、その時刻が来るまでロードが完了してもゲームを開始せず、その時刻になったらゲームが始まるようにすればよいでしょう。
しかしその場合でも、クライアントとなるコンピュータのシステム時刻が狂っていたり意図的に変えられていたら同時には開始できませんし、チートされることもあるでしょう。

投稿2020/07/13 14:31

編集2020/07/13 14:35
bboydaisuke

総合スコア5270

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問