Unity3dNetwork网络基础学习

简介: 1.Network.Player获取本地NetworkPlayer实例NetworkPlayer,一个可以从网络定位玩家的数据结构。我们来看一下API的查看一下包含的变量:NetworkPlayer.ipAddressIP我们可以得到这个参数的IP地址,NetworkPlayer.externalIP得到外网的IP,port和externalport可以的到端口和外网的端口。

1.Network.Player

获取本地NetworkPlayer实例NetworkPlayer,一个可以从网络定位玩家的数据结构。我们来看一下API的查看一下包含的变

量:NetworkPlayer.ipAddress

IP我们可以得到这个参数的IP地址,NetworkPlayer.externalIP得到外网的IP,port和external

port可以的到端口和外网的端口。内网跟外网的区别大家可以去查一查,个人理解就是一个局域网和外部网络。GUID这个我也不清楚什么东西,就是知道在

初始化服务器的参数,具体功能后面再说,对其运行机制的有兴趣的朋友可以查一查。

2.OnServerInitialized()当Network.InitializeServer被调用并完成时,在服务器上调用Network.InitializeServer(connections : int, listenPort : int, useNat : bool)初始化服务器Network.Instantiate()实例化预设,我们看一看他的参数:connections是允许的入站连接或玩家的数量,listenPort是要监听的端口(如果不知道什么是端口的,自己查查看吧,我真不想说),useNat设置NAT穿透功能。如果你想要这个服务器能够接受连接使用NAT穿透,使用facilitator,设置这个为true(打脸啊,这么快就出来了)。

3.OnPlayerConnected()当一个新玩家成功连接时在服务器调用。

4.OnSerializeNetworkView() 自定义变量同步。后续会有这个函数的讲解。

5.OnPlayerDisconnected()当一个玩家从服务器上断开时在服务器端调用Network.RemoveRPCs(player)移除所有属于这个玩家的ID的RPC函数

Network.Destroy()跨网络销毁该物体(本地和远端)

6.OnDisconnectedFromServer()当失去连接或从服务器端断开时在客户端调用

7.Network.peerType端类型的状态,即disconnected, connecting, server 或 client四种NetworkPeerType 描述作为由Network.peerType返回的网络接口端类型的状态

8.Network.connections所有连接的玩家

9.NetworkView网络视图,定义什么在网络上同步和如何同步Gameobject.networkView 附属于这个游戏物体上的网络视图networkView.RPC()远程过程调用

10.Network.Disconnect() 关闭所有开放的连接并关闭网络接口。

了解了上面的函数之后,我们先做一个简单的连接。​

[AppleScript]纯文本查看复制代码

​​​​​// Use this for initialization

//定义远程连接IP地址

private string remoteIP = "127.0.0.1";

//定义远程的端口号

private int remotePort = 10000;

//限制连接数量为15个用户

private int connectCount=15;

//是否启用网络地址转换器

private bool useNAT=false;

void OnGUI() {

switch (Network.peerType) {

case NetworkPeerType.Disconnected:

//服务器未开启时,开启服务器

StartConnect();

break;

case NetworkPeerType.Server:

//成功连接服务器

OnServer();

break;

case NetworkPeerType.Client:

break;

case NetworkPeerType.Connecting:

break;

}

}

​(这尼玛贴不了图了,凑合着看吧);这段断代码做了一个简单的判断,其中Network.peerType用来判断网络的连接状态(是否连接,是客户端还是服务端);

继续:

[AppleScript]纯文本查看复制代码

void StartConnect(){

remoteIP=GUI.TextField(new Rect(10,30,100,20),remoteIP);

if(GUI.Button(new Rect(10,50,100,30),"创建服务器")){

Network.incomingPassword="UnityNetwork";

NetworkConnectionError error=Network.InitializeServer(connectCount,remotePort,useNAT);

Debug.Log(error);

}

if(GUI.Button(new Rect(10,85,100,30),"连接服务器")){

NetworkConnectionError error=Network.Connect(remoteIP,remotePort,"UnityNetwork");

Debug.Log(error);

}

}

这个函数表示服务端的​连接。

void OnServer() {

GUILayout.Label("  服务端创建成功。等待连接····");

//得到的IP与端口

string ip=Network.player.ipAddress;

int port=Network.player.port;

GUILayout.Label("  ip地址:"+ip+".\n  端口号码:"+port);

//连接到服务器的所有客户端

int connectLength=Network.connections.Length;

//遍历所有客户端并获取IP与端口号

for(int i=0;i

GUILayout.Label("  连接的IP:"+Network.connections.ipAddress);

GUILayout.Label("  连接的端口:"+Network.connections.port);

}

if(GUI.Button(new Rect(10,140,100,30),"断开连接"))

{

//从服务器上断开连接

Network.Disconnect(200);

}

}

///

/// 当有新的用户连接进来时

///

void OnPlayerConnected(NetworkPlayer player){

Debug.Log("新连接入客户端:"+player);

SendMessage("createPlayer",player);

//networkView.RPC("OnNetworkLoaded",RPCMode.Others,player);

}

///

/// 当现有用户断线时

///

void OnPlayerDisconnected(NetworkPlayer player) {

Debug.Log("清除对象: " + player);

Network.RemoveRPCs(player);

Network.DestroyPlayerObjects(player);

}

///

/// 当前脚本作为客户端时 成功连接到服务器时 调用当前方法

///

void OnConnectedToServer(){

Debug.Log("客户端成功连接上服务器了!!!");

}

好了,到此为止,创建连接的脚本已经建立完成。下次更新信息同步的功能。​

​SendMessage("createPlayer",player);这个信息发送无法执行,因为“create Player”方法在另一个脚本中,如果有朋友想要尝试运行此脚本,将这个方法暂时注掉就可以了。

相关文章
|
1月前
|
消息中间件 网络协议 C++
C/C++网络编程基础知识超详细讲解第三部分(系统性学习day13)
C/C++网络编程基础知识超详细讲解第三部分(系统性学习day13)
|
1月前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
3月前
|
SQL 运维 安全
黑客(网络安全)技术自学——高效学习
黑客(网络安全)技术自学——高效学习
28 1
|
3月前
|
开发框架 网络协议 .NET
【网络奇缘】- 计算机网络|分层结构|深入学习ISO模型
【网络奇缘】- 计算机网络|分层结构|深入学习ISO模型
48 0
|
3月前
|
网络协议 Go API
Go语言学习-网络基础
Go语言学习-网络基础
32 0
|
3月前
|
网络协议
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(下)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
35 2
|
3月前
|
网络协议 Linux 数据处理
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
82 3
|
2天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
16天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
1月前
|
机器学习/深度学习 开发者
论文介绍:基于扩散神经网络生成的时空少样本学习
【2月更文挑战第28天】论文介绍:基于扩散神经网络生成的时空少样本学习
16 1
论文介绍:基于扩散神经网络生成的时空少样本学习