[РЕШЕНО]Загрузка уровня по сети, проблема

Сеть в Unity3D

[РЕШЕНО]Загрузка уровня по сети, проблема

Сообщение corrozian 21 июл 2011, 17:33

Приветствую всех. У меня есть 2 сцены(главное меню и игровая сцена), в 1ой сцене есть 2 кнопки "Создать сервер" и "Подключиться". Так вот после нажатия кнопки "создать сервер", как и положено создается скриптами сервер и происходит переход в сцену 2 и все нормально, но вот есть проблема когда кто то присоеденяется(т.е. жмет в сцене 1 кнопку "присоеденится"), он присоеденяется, но в это время происходит обновление сцены хоста(сервера) на сцену как у присоеденяющегося(клиента).Вопрос как сделать так чтобы обновлялась сцена клиента, а не сервера, за помощь буду очень благодарен.
Скрипт конекта:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;


public class GUIConnect : MonoBehaviour

{

        public GUIStyle PCLabelsStyle;

        public GUIStyle PCBtnStyle;

        public GUISkin PCSkin;

        private int WB = 170;

        private int HB = 45;

        private string pname;

        private int flag = 1;

        private string level = "GameScen";

        private int lastLevelPrefix = 0;

       

    public string connectToIP = "127.0.0.1";

    public int connectPort = 25001;

        private Rect windowRect = new Rect(Screen.width/3,Screen.height/10,300,420);

       

        void Awake () {

    DontDestroyOnLoad (this);

    }

       

        void Start(){

                pname = PlayerPrefs.GetString("Player Name","Без Имени");

        }

    // Смешанный GUI для сервера и клиента

    public void OnGUI()

    {

                GUI.skin = PCSkin;

                if(flag ==1){

                windowRect = GUI.Window(0, windowRect, DoMyWindow, "Главное меню ");

                }

        }

       

        void DoMyWindow(int windowID) {

        if (Network.peerType == NetworkPeerType.Disconnected)

        {

            //Сейчас мы отключены и не являемся клиентом или хостом

            GUI.Label(new Rect(30,95,WB+30,HB-15),"Имя:");

                        GUI.Label(new Rect(30,135,WB+30,HB-15),"IP:");

                        GUI.Label(new Rect(30,175,WB+30,HB-15),"Порт:");

                        //Ввод имени

                        pname = GUI.TextField(new Rect(70,95,WB,HB-10),pname);

            connectToIP = GUI.TextField(new Rect(70,135,WB,HB-10),connectToIP);

            connectPort = int.Parse(GUI.TextField(new Rect(70,175,WB,HB-10),connectPort.ToString()));



            if (GUI.Button(new Rect(60,210,WB,HB),"Подключение",PCBtnStyle))

            {

                // Подсоединяемся к "connectToIP" и "connectPort" как клиент

                // В данном случае игнорируем NAT

                Network.Connect(connectToIP, connectPort);

            }



            if (GUI.Button(new Rect(60,HB+210,WB,HB),"Создать Сервер",PCBtnStyle))

            {

                // Создаем север с 32 клиентами используя порт "connectPort"  

                // Так же игнорируем NAT  

                Network.InitializeServer(32, connectPort,false);

            }

                        //Выход(работает только в приложении)

                        if (GUI.Button(new Rect(60,HB*2+210,WB,HB),"Выход",PCBtnStyle))

            {

                            Application.Quit();

                        }

        }

                else

        {

                        GUI.Label(new Rect(50,95,WB+30,HB-15),"Загрузка...");

                        PlayerPrefs.SetString ("Player Name",pname);

                        if(flag == 1){

                        networkView.RPC( "LoadLevel", RPCMode.All, level, lastLevelPrefix+1);

                        flag =0;

                        }

                }

        }

[RPC]

public IEnumerator LoadLevel (string level, int levelPrefix)

{

        Debug.Log("Loading level " + level + " with prefix " + levelPrefix);

        lastLevelPrefix = levelPrefix;



        Network.isMessageQueueRunning = false;

        Network.SetLevelPrefix(levelPrefix);

        Application.LoadLevel(level);

        yield return new WaitForSeconds(0);



        Network.isMessageQueueRunning = true;

        Network.SetSendingEnabled(0, true);

        foreach (GameObject go in FindObjectsOfType(typeof(GameObject)))

                go.SendMessage("Spawnplayer", SendMessageOptions.DontRequireReceiver);

}

}

Писался по урокам)
Последний раз редактировалось corrozian 22 июл 2011, 22:15, всего редактировалось 1 раз.
corrozian
UNец
 
Сообщения: 16
Зарегистрирован: 10 июн 2011, 12:47

Re: Загрузка уровня по сети, проблема

Сообщение corrozian 22 июл 2011, 20:36

Что совсем никто не знает как решить эту проблему, и кстати забыл дописать, но думаю понятно у сервера не должно происходить обновление
corrozian
UNец
 
Сообщения: 16
Зарегистрирован: 10 июн 2011, 12:47

Re: Загрузка уровня по сети, проблема

Сообщение corrozian 22 июл 2011, 21:56

Решил проблему, путем следующих изменений в скрипте
Синтаксис:
Используется csharp
               
...........
else
        {

                        GUI.Label(new Rect(50,95,WB+30,HB-15),"Загрузка...");

                        PlayerPrefs.SetString ("Player Name",pname);

                        if(flag == 1){

                        networkView.RPC( "LoadLevel", RPCMode.AllBuffered);

                        flag =0;

                        }

                }

        }

[RPC]

public IEnumerator LoadLevel ()

{

        Application.LoadLevel("GameScen");

        Network.isMessageQueueRunning = false;

        yield return new WaitForSeconds(0);

        Network.isMessageQueueRunning = true;

        Network.SetSendingEnabled(0, true);

        foreach (GameObject go in FindObjectsOfType(typeof(GameObject)))

                go.SendMessage("Spawnplayer", SendMessageOptions.DontRequireReceiver);

        Destroy(gameObject);

}

}


Но появилась другая проблема когда кто присоединяется у него создается 2 персонажа, я так полагаю программа создает персов сразу для него самого и сервера, так как при присоединение 3го игрока у него еще больше персов. Может кто то сталкивался с этим явлением?
corrozian
UNец
 
Сообщения: 16
Зарегистрирован: 10 июн 2011, 12:47

Re: Загрузка уровня по сети, проблема

Сообщение corrozian 22 июл 2011, 22:14

[V] Все исправил, посредством установки флага при создании персонажа.
corrozian
UNец
 
Сообщения: 16
Зарегистрирован: 10 июн 2011, 12:47


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2