Ошибка в MP manager,решено

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Ошибка в MP manager,решено

Сообщение Ingener 16 окт 2012, 21:52

Писал скрипт интерфейса для мультиплеера и столкнулся с ошибкой,долго лазал,мучился,переставлял версии юнити,но все равно не смог исправить,может кто-нибудь объяснить в чем ошибка и как ее исправить?
вот код MenuManager
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class MenuManager : MonoBehaviour {
        public string CurrentMenu;
        public string MatchName = "";
        public string MatchPassword = "";
        public int MaxPlayers = 32;
        public GUISkin GameSkin;
void Start()
        {
        CurrentMenu = "Main";
        }

void OnGUI()
        {
        GUI.skin = GameSkin;
        if(CurrentMenu == "Main")
                Menu_Main();
        if(CurrentMenu == "Lobby")
                Menu_Lobby();
        if(CurrentMenu == "Host")
                Menu_HostGame();
       
        }
       
public void NavigateTo(string nextmenu)
        {
                CurrentMenu = nextmenu;
        }
       
private void Menu_Main()
        {
        if (GUI.Button(new Rect(10,10,150,50),"Host_Game"))
                {
                NavigateTo("Host");
                }
       
        GUI.Label(new Rect(200,10,100,30), "Player Name");
        MultiplayerManager.instance.PlayerName = GUI.TextField(new Rect(400,10,200,30),MultiplayerManager.instance.PlayerName);
       
        }
       
private void Menu_HostGame()
        {
        //button Host game
        if (GUI.Button(new Rect(10,60,150,50),"Back"))
                {
                NavigateTo("Main");
                }
       
        if (GUI.Button(new Rect(10,10,150,50),"Start"))
                {
                                MultiplayerManager.instance.StartServer( MatchName, MatchPassword, MaxPlayers);
                }
       
        GUI.Label(new Rect(200,10,100,30), "Name");
        MatchName = GUI.TextField(new Rect(400,10,200,30),MatchName);
       
        GUI.Label(new Rect(200,60,100,30), "Password");
        MatchPassword = GUI.PasswordField(new Rect(400,60,200,30), MatchPassword, '*');
       
        GUI.Label(new Rect(200,90,100,30), "Max Players");
        GUI.Label(new Rect(400,90,200,30), MaxPlayers.ToString());
        MaxPlayers = Mathf.Clamp(MaxPlayers, 8, 32);
               
        if (GUI.Button(new Rect(425,90,25,30),"+"))
                MaxPlayers += 2;
        if (GUI.Button(new Rect(450,90,25,30),"-"))
                MaxPlayers -= 2;
}

private void Menu_Lobby()
        {
       
        }
}
 

и MP manager
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MultiplayerManager : MonoBehaviour {

        public static MultiplayerManager instance;
       
        public string PlayerName;
       
        private string Name = "";
        private string Password = "";
        private int MaxUsers = 32;
       
        public List<mpPlayer> PlayerList = new List<mpPlayer>();
       
        void Start()
        {
        instance = this;
        }
       
        void StartServer(string serverName,string serverPassword,int maxusers)
        {
        Name = serverName;
        Password = serverPassword;
        MaxUsers = maxusers;
        Network.InitializeServer(MaxUsers, 2550, false);
        Network.InitializeSecurity();
        }
       
        void OnServerInitialized()
        {
                Server_PlayerJointRequest("",Network.player);
        }
       
        void OnConnectedToServer()
        {
                NetworkView.RPC("Server_PlayerJointRequest", RPCMode.Server, "",Network.player);
        }
       
        void OnPlayerDisconnected (NetworkPlayer id)
        {
                NetworkView.RPC("Client_RemoovePlayer", RPCMode.All, id);
        }
        [RPC]
        void Server_PlayerJointRequest(string playername,NetworkPlayer view)
        {
                NetworkView.RPC("Client_AddPlayerToList", RPCMode.All, playername, view);
        }
        [RPC]
        void Client_AddPlayerToList(string playername,NetworkPlayer view)
        {
                mpPlayer = tempPlayer = new mpPlayer ();
                tempplayer.PlayerName = playername;
                tempplayer.PlayerNetwork = view;
                PlayerList.Add(tempplayer);
        }
        [RPC]
        void Client_RemoovePlayer(NetworkPlayer view)
        {
                mpPlayer temppl = null;
                foreach(mpPlayer pl in PlayerList)
                {
                        if (pl.PlayerNetwork == view)
                        {
                                temppl = pl;
                        }
                }
                if (temppl != null)
                {
                        PlayerList.Remove(temppl);
                }
        }
}

public class mpPlayer{
        public string PlayerName = "";
        public NetworkPlayer PlayerNet;
       
}
 

И сама ошибка - Assets/Scripts_MP/MenuManager.cs(54,61): error CS0122: `MultiplayerManager.StartServer(string, string, int)' is inaccessible due to its protection level
Последний раз редактировалось Ingener 18 окт 2012, 12:18, всего редактировалось 1 раз.
Ingener
UNIт
 
Сообщения: 53
Зарегистрирован: 06 мар 2012, 14:50

Re: Ошибка в MP manager

Сообщение seaman 16 окт 2012, 22:45

Ну а что написано прочитать можешь?
ЗЫ: когда же новички начнут наконец читать что им пишет Юнити?
ЗЗЫ: Хотя если в программировании не шаришь, то слова "protection level" ничего не скажут. Какой вывод? Новичкам нужно сначала научиться программировать, а уже потом браться за Юнити!
ЗЗЫ: Сделай MultiplayerManager.StartServer public-ом
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Ошибка в MP manager

Сообщение Ingener 17 окт 2012, 06:47

да я понял что уровень защиты не позволяет,делал ток не те функции публичными.
Афигеть,терь еще больше ошибок стало
Ingener
UNIт
 
Сообщения: 53
Зарегистрирован: 06 мар 2012, 14:50

Re: Ошибка в MP manager

Сообщение Ingener 17 окт 2012, 18:51

Вот еще ошибочка возникла
Assets/Scripts_MP/MultiplayerManager.cs(38,29): error CS0120: An object reference is required to access non-static member `UnityEngine.NetworkView.RPC(string, UnityEngine.RPCMode, params object[])'
Ingener
UNIт
 
Сообщения: 53
Зарегистрирован: 06 мар 2012, 14:50

Re: Ошибка в MP manager

Сообщение seaman 17 окт 2012, 19:12

Читай и думай - тебе все написали.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Ошибка в MP manager

Сообщение Ingener 18 окт 2012, 06:45

думаю,функция содержит не статические переменные?
Ingener
UNIт
 
Сообщения: 53
Зарегистрирован: 06 мар 2012, 14:50

Re: Ошибка в MP manager

Сообщение Ingener 18 окт 2012, 12:18

Ахах,все исправил,ошибки глупые были,тема клоузед.
Ingener
UNIт
 
Сообщения: 53
Зарегистрирован: 06 мар 2012, 14:50


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 22