2017-04-26 7 views
0

Network Managerに "HostGame"というスクリプトを追加しました。 "Lobby"ボタンを押すと、 "HostGame"マッチメイキングマッチを開始します。ゲームを中断ボタンを押すと、別のスクリプトが私を試合から切り離し、ゲームをロビーシーンに戻します。ただし、ロビーの作成ボタンは、ネットワークマネージャーが行ったことがないのに、ホストゲームスクリプトへの参照を失いました離れて。Unity(C#) - dontdestroyonloadを使用してもシーンチェンジでスクリプトが無効になる

「HostGame」に「OnGet」というイベントを追加しました。このイベントは、無効にされたときにコンソールに書き込んでいました。

アイデア?私は右のあなたを得た場合

おかげ

+0

シーンがデータを保持していると想定されていないため、オブジェクトが読み込まれたままになっていると頭痛を引き起こします。 Netowrk Managerが重複していないことを確認してください(またはインスタンス化しようとしている既存のインスタンスのデータを上書きしてください)。 – Draco18s

+0

私はちょうど、ユニティが_NETMANAGER_という空のゲームオブジェクトにコンポーネントとして追加したnetworkmanagerスクリプトを手に入れました。何らかの理由で、ロビーからゲームに切り替えるときにすべて同じ状態を保ちますが、ゲームを離れてロビーに戻るときnetworkmanagerオブジェクトにアタッチされたHostGameスクリプトは、それらの空のスクリプトの1つに変わります。 –

答えて

0

あなたがそのDont Destroy On Loadプロパティセットで、ロビーのシーンでゲームオブジェクトN上にNetworkManagerを持っています。 また、別のGameObject Rがシーン内にあり、Nを参照しています。

今、この問題が発生した:

  • ゲームは、あなたが原因のゲームオブジェクトN除い "Lobby.scene" のすべて(
    • ログイン で "Lobby.scene"
    • である
    • を開始しますDontDestroyOnLoad)が破棄されます。
    • NetworkManagerの負荷シーン "Game.scene"
  • ゲーム(ためDontDestroyOnLoadの)N除い "Game.scene" のすべてが破壊され
    • ログアウト でしばらく
    • のために実行されます。
    • NetworkManagerの負荷シーン「Lobby.scene」のオリジナルが破壊されなかったとして、あなたは今、2つのゲームオブジェクトN#1とNetworkManagerでN#2を持っているが、あなたはまた、「Lobby.scene」から新しいインスタンスをロード
    • Rは "Lobby.scene" との言及からロードされたN#2
    • のNetworkManager#2は、すでに他のNetworkManagerがあることを検出し、自身とそのゲームオブジェクトN#2
    • を破壊し、そのAwake()を実行しますN#2は、もはや「開発者」へのあなたのNetworkManagerにLogLevelを設定することにより、

あなたは、これが問題であることを確認することができますが存在するとして、210は現在、行方不明の参照を持っていません。ロビーに戻った後、あなたのコンソールで次のログ出力が表示されます。通常は、すべてのシーンでNetworkManagerをしたが、ゲームの起動時にコードから、それをインスタンス化されていないこの問題の

Multiple NetworkManagers detected in the scene. Only one NetworkManager can exist at a time. The duplicate NetworkManager will not be used. 

私のソリューション。そうすれば、私はその生涯にわたって完全な支配権を得ることができます。

関連する問題