Network的快速了解

Network

Network类是unity里实现网络操作的核心类,并提供一系列静态方法来实现网络链接的操作,这个类配置了网络接口和所有网络参数。可以使用它来设置一个服务器或连接到一个服务器并有一些辅助函数来帮助你完成这些功能。在Unity2018.2.3版本里被移除

  • 初步使用的方法

**InitializeServer(),**初始化服务器,两个重载的方法。
public static NetworkConnectionError InitializeServer(int connections, int listenPort);
public static NetworkConnectionError InitializeServer(int connections, int listenPort, bool useNat);
三个参数分别是:连接用户的数量 端口号,是否使用Nat。

. 涉及知识点
Network.peerType是端的状态,是一个枚举类型——NetworkPeerType,有四种状态
这里写图片描述

  • 连接后常用的方法
    .OnServerInitialized() 每当服务器调用Network.InitializeServer()完成后调用的方法
    Network.OnPlayerConnected(NetworkPlayer) 每当一个新玩家成功连接时,在服务器上调用这个函数
    NetworkPlayer是一个结构类,返回另一个玩家的数据结构。 这里简单做一下介绍,大家有兴趣可以去查文档
    OnConnectedToServer() 客户端连接上服务器时调用的方法

    这里写图片描述

    Network.OnConnectedToServer() 当连接到服务器时调用方法
    更新代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyNetWork : MonoBehaviour {

    int port = 8866;//端口号;
    int connections = 10;//链接数; 
    bool useNet = false;
    string ip = "127.0.0.1";
	// Use this for initialization
	void Start () {
        
	}

    private void OnGUI()
    {
        //服务器未连接
        if (Network.peerType == NetworkPeerType.Disconnected)
        {
            
            if (GUILayout.Button("创建服务器"))
            {
                NetworkConnectionError error = Network.InitializeServer(connections, port, useNet);
                print(error);

            }
            if (GUILayout.Button("连接服务器"))
            {
                NetworkConnectionError error = Network.Connect(ip, port);
                print(error);
            }
        }
        //服务器已经创建
        else if (Network.peerType == NetworkPeerType.Server)
        {
            GUILayout.Label("服务器已经创建");
        }
        //服务器已经连接
        else if (Network.peerType == NetworkPeerType.Client)
        {
            GUILayout.Label("已经连接");
        }
    }

    //服务器初始化时调用
    void OnServerInitialized()
    {
        print("初始化服务器成功");
    }
    //用户连接进来时调用
    private void OnPlayerConnected(NetworkPlayer player)
    {
        print("玩家:"+player+"连接进来 IP:"+player.ipAddress);
    }
    private void OnConnectedToServer()
    {
        print("连接倒服务器");
    }
}

启动了两个客户端,一个当服务器,一个客户端.都是在本机执行。效果如下
这里写图片描述

-同步实例化方法,Network.Instantiate()
public static Object Instantiate(Object prefab, Vector3 position, Quaternion rotation, int group);
此方法实现实例化后,会网络实例化一个预制件。其他所有连接上的客户都将立即调用服务器相同的方法,来实现实例化。

public class MyNetWork : MonoBehaviour {

    int port = 8866;//端口号;
    int connections = 10;//链接数; 
    bool useNet = false;
    string ip = "127.0.0.1";
    int group;
    public GameObject eyes;
	// Use this for initialization
	void Start () {
        
	}

    private void OnGUI()
    {
        //服务器未连接
        if (Network.peerType == NetworkPeerType.Disconnected)
        {
            
            if (GUILayout.Button("创建服务器"))
            {
                NetworkConnectionError error = Network.InitializeServer(connections, port, useNet);
                print(error);

            }
            if (GUILayout.Button("连接服务器"))
            {
                NetworkConnectionError error = Network.Connect(ip, port);
                print(error);
            }
        }
        //服务器已经创建
        else if (Network.peerType == NetworkPeerType.Server)
        {
            GUILayout.Label("服务器已经创建");
        }
        //服务器已经连接
        else if (Network.peerType == NetworkPeerType.Client)
        {
            GUILayout.Label("已经连接");
        }
    }

    //服务器初始化时调用
    void OnServerInitialized()
    {
    //初始化预制体
        group = int.Parse(Network.player.ToString());
        Network.Instantiate(eyes,Vector3.zero,Quaternion.identity,group);
        print("初始化服务器成功");
    }
    //用户连接进来时调用
    private void OnPlayerConnected(NetworkPlayer player)
    {
        print("玩家:"+player+"连接进来 IP:"+player.ipAddress);
    }
    private void OnConnectedToServer()
    {
        print("连接倒服务器");
    }
}

效果图
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值