Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
来源:互联网 发布:java漏洞扫描 编辑:程序博客网 时间:2024/05/20 10:22
首先个人说说题外话,Unity3d使用的网络库核心是用C++实现的一款商业网络游戏引擎库,
RakNet。所以对于移动设备来说,用Unity3d来写服务器是完全可以的,并且内建网络库的各项功能封装完善。
对于一款ARGP都可以轻松的上手来写服务器,游戏对象的处理或者同步对象使用RPC,
对于一般的手游来说省了不少的麻烦事。
其网络性能也不亚于普通的HTTP传输协议
Unity3d中的内建网络核心是使用Network函数,使用Network可以创建一个服务器,
也可以建立一个到服务器的连接,使用Network.InitalizeServer(int maxConns, listenPort, boo useNat)来初始化一个服务器,
这里只是指定了本地服务器的端口,并没有指定ip地址,如果是本机,直接使用127.0.0.1即可。
如果电脑已经联网,Unity3d会指定公网IP地址,或者127.0.0.1,作为服务器默认连接地址。
如果服务器初始化成功,在Network的回调函数中,会调用
void OnServerInitialized(),如果初始化失败,直接报错误信息。
使用Network.Connect(ip, port)可以简单的连接到一个已经开始的服务端,如果连接服务器成功,则会回调
void OnConnectedToServer(), 如果连接服务器失败,则会回调
void OnFailedToConnect(NetworkConnectionError error),函数里面封装了错误信息。
并且对游戏对象的销毁处理也很方便,省了对服务器的压力。比如一个多人同时在线的网络,有一个即时游戏公告
希望在线的玩家以及当前不在线的玩家都可以看到,在使用Unity3d的内建功能当服务器时,可以直接缓存公告
直到玩家上线,然后给玩家展示。
还有比如,有玩家下线。对于当前玩家的游戏即时缓存已经没有了作用,并且会占用服务器的资源。
你可以在回调函数里直接销毁任何玩家有当前下线玩家信息的玩家。然后通知服务器自己来销毁。
这也是RPC的强大之处。
还有ARPG游戏中创建房间是一件比较麻烦头痛的事情,而在Unity3d内建网络库里,你可以直接迁移主机信息,
可以暂时将服务器由客户端来托管。还有网络数据同步回调,特别对NetworkView,可以说用Unity3d来写服务器
是一个很不错的选择。相信Unity3d,他不是一个免费软件。
自动写了一个简单的服务器创建与客户端连接的实例:
- public void StartSvr () {
- if (Network.peerType == NetworkPeerType.Disconnected) {
- print("start init & start svr.");
- Network.InitializeServer(32, port, false);
- }
- }
- public void StartUsr () {
- // if (Network.peerType == NetworkPeerType.Connecting) {
- print("svr running noramlize.");
- Network.Connect("192.168.6.185", port);
- // }
- }
- // callback state for svr
- void OnServerInitialized() {
- print("Server initialized and ready.");
- }
- void OnPlayerDisconnected(NetworkPlayer player) {
- Debug.Log("Clean up after player " + player);
- Network.RemoveRPCs(player);
- Network.DestroyPlayerObjects(player);
- }
- private int playerCount = 0;
- void OnPlayerConnected(NetworkPlayer player) {
- Debug.Log("Player " + playerCount++ + " connected from " + player.ipAddress + ":" + player.port);
- }
- // callback svr end
- // callback state for usr
- void OnConnectedToServer() {
- Debug.Log("Connected to server");
- }
- void OnDisconnectedFromServer(NetworkDisconnection info) {
- if (Network.isServer)
- Debug.Log("Local server connection disconnected");
- else
- if (info == NetworkDisconnection.LostConnection)
- Debug.Log("Lost connection to the server");
- else
- Debug.Log("Successfully diconnected from the server");
- }
- void OnFailedToConnect(NetworkConnectionError error) {
- Debug.Log("Could not connect to server: " + error);
- }
- // callback usr end
:)
- Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
- Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
- Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
- Unity3d 网络编程(二)(Unity3d内建网络各项参数介绍)
- Unity3d 网络编程(二)(Unity3d内建网络各项参数介绍)
- Unity3d 网络编程(三)(Unity3d内建网络简单服务器的建立)
- Unity3d 网络编程(三)(Unity3d内建网络简单服务器的建立)
- [Unity3D ARPG网络游戏编程实践] 网络连接 :unity NetWork与socket的对比(一)
- Unity3D学习笔记(一)界面介绍
- Unity3D学习笔记(一)界面介绍
- Unity3d接入googleplay内购详细说明(一)
- unity3d从零开始(一):初识unity3d
- unity3d学习(一)
- 漫话Unity3D(一)
- Unity3d笔记(一)
- UNITY3D自学--(一)
- Unity3D协程(一)
- unity3d网络编程关键
- Spring配置文件的applicationContext.xml文件头部出现红叉
- jquery判断浏览器类型
- JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片
- node ->rman to RAC (迁移)
- wamp修改mysql空密码及取消phpmyadmin的自动登录
- Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
- Unity3D【脚本】把一个ui物体,对准世界坐标中的物体,可以实现例如血条等
- android开发之eclipse调试debug模式详解
- Java HotSpot VM
- android uiautomator学习(一)创建工程
- 用std::string取代char*
- android sdk安装2(解决安卓 sdk 无法更新)
- C基础入门笔记1
- string和stringBuilder区别