Unity实战篇:坦克大战联机版(红白机复刻)制作。(二)(NGUI,服务器的创建与客户端的连接)

这一期我们来实现UI的搭建以及服务器的创建。并详述一些注意事项。

首先是UI的搭建,我们用到了UGUIv3.6.8插件。下载地址https://pan.baidu.com/s/1ZEWnjdCebGiHLSUzy8YP_g

导入完成后菜单栏会出现NGUI选项。

NGUI-Open-PrefabToolBar主要需要用到Simple Button和Simple InputField这两个组件。直接拖到场景中即可。其余UI同学们可以自由发挥。这里不再多费口舌。

接下来是Button事件的绑定。选中Button按钮,在Inspector面板下,找到UI Button,并在On Click下指定脚本与方法。注意,脚本里待绑定方法一定是public,不然找不到。

其次是Button绑定的方法。

Network.InitializeServer(在2018.3.2被弃用)

Obsolete public static NetworkConnectionError InitializeServer(int connections, int listenPort, bool useNat);

描述

connections是允许的入站连接或玩家的数量,listenPort是要监听的端口,useNat设置NAT穿透功能。如果你想要这个服务器能够接受连接使用NAT穿透,使用facilitator,设置这个为true。


    public UIInput ipInput;//需要连接服务器的时候的ip,获取Input输入的值。
    public int listenPort = 8899;//监听端口   
    public void OnButtonCreateServerClick()
    {
        Network.InitializeServer(2, listenPort, true);//创建服务器
    }
    public void OnButtonConnectServerClick()
    {
        Network.Connect(ipInput.value, listenPort);//连接服务器
    }

然后就是逻辑判断,我们要等到客户端连接一同进入游戏。

    public  bool createSuccess=false;
    public  bool _isServer=true;
    public GameObject uiRoot;
    private void Update()
    {
        if(createSuccess&&_isServer)
        {
            uiRoot.SetActive(false);
            createSuccess = false;
            itemList.Clear();
            sceneCount.text = "Scene " + _scene.ToString();
            Scene.SetActive(true);
            Invoke("LoadComplate", 2.0f);
            Invoke("InitMap", 2.0f);
        }
        
        //if(UPlayerManager.Instance.vestigial<=0)
        //{
        //    UPlayerManager.Instance.vestigial = 25;
        //    itemList.Clear();
        //    SceneManager.LoadScene(1);
        //    _scene++;
        //    sceneCount.text ="Scene "+ _scene.ToString();
        //}
        //IronHeart();
    }
    private void OnConnectedToServer()
    {
        _isServer = false;
        uiRoot.SetActive(false);//客户端连接后隐藏NGUI的UIRoot
    }
    private void OnPlayerConnected(NetworkPlayer player)
    {
        createSuccess = true;
    }

有人可能要问,为什么不用Network Manager HUD组件,其实也可以,但是需要重写OnConnectedToServer()和OnPlayerConnected()方法,不然达不到我们的目的,其次使用Network Manager HUD并不能有一个很好看的UI。(手动滑稽)

想更多的了解NetWork Manager可以去看这位大神的博客。https://blog.csdn.net/u010019717/article/details/46849341

猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/81568373
今日推荐