NetWork局域网组件


使用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组件会把创建出来共享物体的客户端当做主客户端,只有主客户端可以修改共享物体的数据并共享到其他客户端,其他客户端对该共享该共享物体的数据(数据以主客户端数据为主),没有权限修改该共享物体的数据(可以修改,但是不会共享到局域网内)


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cchoop

有用的话请杯肥宅水

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值