NetWork局域网组件

来源:互联网 发布:易语言编程视频 编辑:程序博客网 时间:2024/06/05 00:21

使用NetWork创建服务器端Sever


NetworkConnectionError error = Network.InitializeServer(connections, listenPort, useNat);
》connections:表示最大连接数
》listenPort:连接的端口
》useNat:是否使用Nat技术
》NetworkPeerType.Disconnected有四中状态,分为客户端和服务器端
服务端:
NetworkPeerType.Disconnected: //服务端未初始化时
NetworkPeerType.Server: //初始化成功、开始监听后
客户端:
NetworkPeerType.Disconnected: //客户端未初始化
NetworkPeerType.Connecting: //客服端正在请求和服务端建立连接
NetworkPeerType.Client: //客户端跟服务端建立连接

using UnityEngine;using UnityEngine.UI;public class MyNetWord : MonoBehaviour {    public int connections = 10;    public int listenPort = 8899;    public bool useNat = false;    public Button createServerBtn;    public Button linkServerBtn;    public Text testTip;    void Start()    {        createServerBtn.onClick.AddListener(OnCreatServerClick);    }    private void OnCreatServerClick()    {        NetworkConnectionError error = Network.InitializeServer(connections, listenPort, useNat);        Debug.Log(error);   //如果创建失败会得到错误信息,如果创建成功返回“NoError”        if(Network.peerType == NetworkPeerType.Server)        {            testTip.gameObject.SetActive(true);            createServerBtn.gameObject.SetActive(false);            linkServerBtn.gameObject.SetActive(false);        }    }}

创建Client端连接服务器端


Network.Connect(ip, listenPort);
ip:要连接的服务器端的ip的地址
listenPort:要连接的服务器的端口号
返回结果:返回错误信息,没有错误就返回NoError

using UnityEngine;using UnityEngine.UI;enum PeerType{    Server,    Client,    Disconnected,    None}public class MyNetWord : MonoBehaviour {    public int connections = 10;    public int listenPort = 8899;    public bool useNat = false;    public Button createServerBtn;    public Button linkServerBtn;    public Text testTip;    public string ip = "127.0.0.1";    void Start()    {        createServerBtn.onClick.AddListener(OnCreatServerClick);        linkServerBtn.onClick.AddListener(OnLinkServerClick);    }    private void OnGUI()    {        if (Network.peerType == NetworkPeerType.Client)        {            Debug.Log("++++++++++++++");            ChangTipText("客户端接入");        }    }    private void OnCreatServerClick()    {        NetworkConnectionError error = Network.InitializeServer(connections, listenPort, useNat);        Debug.Log(error);   //如果创建失败会得到错误信息,如果创建成功返回“NoError”        if(Network.peerType == NetworkPeerType.Server)         {            ChangTipText("服务器创建完成");        }    }    private void OnLinkServerClick()    {        NetworkConnectionError error =  Network.Connect(ip, listenPort);        Debug.Log(error);    }    private void ChangTipText(string text)    {        testTip.text = text;        testTip.gameObject.SetActive(true);        createServerBtn.gameObject.SetActive(false);        linkServerBtn.gameObject.SetActive(false);    }}

MonoBehavior中提供监听服务器端和客户端的事件函数


》在服务器端掉用:
1.void OnServerInitialized(){} //服务器初始化时调用
2.OnPlayerConnected(NetworkPlayer player){} //当有客户端连接到服务器端是调用,在服务器端调用
》在客户端调用:
1.void OnConnectedToServer(){} //当客户端连接到服务器端时调用,在客户端调用

private void OnServerInitialized()   //服务器初始化时调用,在服务器端掉用    {        ChangTipText(testTip.text+",Server 完成初始化");    }    private void OnPlayerConnected(NetworkPlayer player)  //当有客户端连接到服务器端是调用,在服务器端调用    {        ChangTipText(testTip.text + "一个客户端连接过来,客户端Index=" + player);    }    private void OnConnectedToServer()    //当客户端连接到服务器端时调用,在客户端调用    {        ChangTipText(testTip.text + "本客户端已经连接到了服务器端");    }

在局域网内创建共享物体


Network.Instantiate(cubePrefab, new Vector3(0, 10, 0), Quaternion.identity, group);
当服务器初始化时,在服务器端实例化一个cube物体,可以在客户端共享;在客户端创建,客户端也可以共享。

private void OnServerInitialized()   //服务器初始化时调用,在服务器端掉用    {        ChangTipText(testTip.text+",Server 完成初始化");        int group = int.Parse(Network.player.ToString());        Network.Instantiate(cubePrefab, new Vector3(0, 10, 0), Quaternion.identity, group);    }

使用NetworkView组件做数据的同步


给局域网内共享的物体加上NetworkView组件课一同步共享物体的数据(如Transform信息)
注意:NetworkView组件会把创建出来共享物体的客户端当做主客户端,只有主客户端可以修改共享物体的数据并共享到其他客户端,其他客户端对该共享该共享物体的数据(数据以主客户端数据为主),没有权限修改该共享物体的数据(可以修改,但是不会共享到局域网内)


后续边学习边更新…
(敬请期待)

原创粉丝点击