Unity3d 游戏开发之Web Player 的server端联网配置

合集下载

Unity3D网络通信[最终定稿]

Unity3D网络通信[最终定稿]

Unity3D网络通信[最终定稿]第一篇:Unity3D网络通信《Unity3D网络通信》课程教学目标:知识目标:一、弱联网(hppt)1、建立服务器2、PHP的基本语法3、WWW的基本应用4、MySql的基本应用5、上传和下载分数6、AssetBundle资源的打包,加载和卸载7、AssetBundle对内存的影响二、局域网(NetWork)1、NetWorkView组件2、Unity局域网常用回调方法3、Unity局域网常用API4、局域网实现角色同步5、局域网实现CS游戏能力目标:一、排行榜二、CS主要教材:《Unity手机游戏开发3D/2D》、《Unity4.x从入门到精通》教学内容及考核要求:第一单元:网络游戏与单机游戏的区别内容:1、网络和单机游戏对比。

2、网络游戏的特点。

3、介绍网络的几种实现方式。

4、介绍本月实现的案例。

考核内容:掌握网络游戏的概念第二单元:建立服务器(安装apache、MySql和PHP)内容:1、安装apache服务器,掌握apache服务器程序的主要功能。

2、掌握如何解决apache不能启动的问题,学会使用控制台程序进行调试。

3、安装MySql数据库,掌握MySql数据库程序的主要功能。

4、学会使用控制台进行MySql数据库的数据查看。

5、安装PHP,掌握如何对PHP的配置文件进行相应的更改。

6、掌握如何在网页中显示相应的PHP文件。

考核内容:搭建HTTP服务器第三单元:PHP的基本语法内容:1、掌握PHP调试工具的使用。

2、PHP语言的输出方法。

3、PHP的变量。

4、PHP语言的注释方式。

5、变量的类型转换6、PHP中的常量7、PHP中的运算符8、PHP中的表达式考核内容:对PHP基本语法有一定的认识第四单元:WWW基本应用内容:1、掌握Unity的WWW主要支持的GET和POST数据传输方式。

2、掌握基本类型的上传和下载。

3、掌握上传和下载图片。

4、掌握下载声音文件。

Unity3D游戏开发之网络游戏服务器架构设计(如何做一名好主程)

Unity3D游戏开发之网络游戏服务器架构设计(如何做一名好主程)

Unity3D游戏开发之网络游戏服务器架构设计培训(如何做一名好主程)今天给大家讲一下如何做一个好的主程入手假如,我现在接手一个新项目,我的身份还是主程序。

在下属人员一一到位之前,在和制作人以及主策划充分沟通后,我需要先独自思考以下问题:1、服务器跑在什么样的操作系统环境下?2、采用哪几种语言开发?主要是什么?3、服务器和客户端以什么样的接口通讯?4、采用哪些第三方的类库?除了技术背景之外,考虑这些问题的时候一定要充分考虑项目需求和所能拥有的资源。

我觉得,先不要想一组需要几台机器各有什么功能这样的问题,也不要想需要多少个daemon进程。

假设就一台服务器,就一个进程,把所需要的资源往最小了考虑,把架构往最简单的方向想,直到发现,“哦,这么做无法满足策划要求的并发量”,再去修改设计方案。

操作系统:越单一越好。

虽然FreeBSD的网络性能更好、虽然Solaris非常稳定,但选什么就是什么,最好别混着来。

前端是FreeBSD,后端是Solaris,运营的人会苦死。

也不要瞧不起用Windows的人,用Windows照样也能支持一组一万人在线,总之,能满足策划需求,好招程序员,运营成本低是要点。

不同的操作系统有不同的特性,如果你真的对它们都很熟悉,那么必定能找到一个理由,一个足够充分的理由让你选择A而不是B而不是C。

但做决策的时候要注意不要因小失大。

Programming Language:传统来说,基本都是C/C++。

但是你也知道,这东西门槛很高,好的C/C++程序员很难招。

用Perl/Python/Lua行不行?当然可以。

但是纯脚本也不好,通常来说是混合着来。

你要明白哪些是关键部分,我是说执行次数最多的地方而不是说元宝,这些必须用性能高的语言实现(比如C/C++比如Java),其它像节日活动这样很久才执行一次的,随便吧。

脚本的好处是,可以快速搭原型。

所以,尽早的,在你做完基本的地图和战斗模块之后,立马跑机器人测试吞吐量。

unity3d网络交互的方法

unity3d网络交互的方法

unity3d--网络交互的方法Remote Procedure Calls(RPC)也叫RPCs,远程过程调用通过网络在不同的机器上调用函数。

这也包括玩家本地游戏实例。

Client 可以传送RPCs到Server,Server也可以把RPCs传到一个或者多个Client上。

最普遍的情况是,RPCs 用于不是很频繁发生的动作。

比如客户端开了一个开关想要开门,它可以传送一个RPCs到Server告诉Server门已经打开了。

然后Server可以传送另一个RPCs给所有Client,执行它们本地的函数将同一扇门打开。

RPCs用于管理和执行独立的事件。

调用RPCs几乎和调用普通函数一样简单,但是仍然有一些重要的区别需要理解。

1.一个RPC调用可以有任意多的参数。

所有的参数当然都会被通过网络传送。

越多的参数会让带宽使用越多。

所以应该尽量减少参数。

2.需要指定谁将要接收正在被送出的RPC。

有几种RPC调用模式,概括了所有常见的情况。

你可以在以下这些模式执行RPC函数:everyone,仅在server,除了自己外的everyone,一个指定的Client或玩家。

状态同步(State Synchronization)状态同步用于共享不断变化的数据。

最好的例子就是在一个动作游戏里一个玩家的位置信息。

这个玩家总是移动,来回跑、跳跃、等等。

即使是不需要控制他的网络中的其他玩家,也需要知道他在哪,在做什么。

通过不断的传送关于这个玩家的位置信息,其他玩家就可以精确的表示这个玩家的位置。

这种数据通常定期的、频繁的通过网络传送。

因为这种数据是时间敏感的,而且需要通过互联网管道从一个机器传到另一个机器上,所以尽可能的减少这种数据的传送量是非常重要的事情。

简单的说,状态同步一般需要很多带宽,所以你应该做一切可能的尽可能减少带宽的使用量。

状态同步目前支持两种类型的传输的可靠性保证(reliability)。

可靠的差值压缩(ReliableDelta Compressed)和非可靠(Unreliable)的方式。

unity 联机原理

unity 联机原理

unity 联机原理Unity是一款流行的游戏开发引擎,它不仅可以创建出精美的单人游戏,还可以实现多人联机模式。

本文将从人类的视角出发,介绍Unity的联机原理。

在游戏开发中,联机模式是一种重要的功能,它可以让玩家与其他玩家进行互动,增加游戏的趣味性和挑战性。

Unity提供了一套完整的联机开发工具和API,使开发者能够轻松实现多人联机功能。

我们需要明确联机游戏的基本原理。

当玩家进入游戏时,Unity会将其与服务器建立连接。

服务器作为游戏的中央控制器,负责协调玩家之间的通信和数据同步。

每个玩家的游戏客户端都会向服务器发送和接收数据,以实现玩家之间的互动。

在联机游戏中,同步是一个重要的概念。

它指的是确保所有玩家看到的游戏状态保持一致。

为了实现同步,Unity使用了一种称为“状态同步”的技术。

简单来说,状态同步是指将玩家的输入和游戏状态发送到服务器,然后由服务器将这些输入和状态广播给其他玩家,以确保所有玩家在同一时间看到的游戏状态是一致的。

为了实现状态同步,Unity使用了一种称为“远程过程调用”(RPC)的技术。

RPC允许开发者在客户端和服务器之间进行方法调用。

通过RPC,开发者可以向服务器发送玩家的输入和游戏状态更新请求,服务器则根据这些请求进行处理,并将结果返回给客户端。

这样,所有玩家就能够看到同样的游戏状态,实现了游戏的同步。

除了状态同步,Unity还提供了其他的联机功能,例如实时聊天、战斗系统、排行榜等。

开发者可以使用Unity的网络组件来实现这些功能,从而为玩家提供更丰富的联机体验。

总结起来,Unity的联机原理是通过建立客户端和服务器之间的连接,使用状态同步和远程过程调用等技术来实现玩家之间的互动和游戏状态的同步。

通过这些技术和工具,开发者可以轻松创建出令人兴奋的多人联机游戏。

无论是与好友一起合作还是与全球玩家竞技,Unity的联机功能都能为玩家提供独特而丰富的游戏体验。

unity 联机原理

unity 联机原理

unity 联机原理Unity是一款强大的游戏开发引擎,它不仅可以让开发者轻松地创建各种类型的游戏,还支持多人联机功能。

本文将介绍Unity联机原理,以及如何在使用Unity开发游戏时实现多人在线游戏。

Unity的多人联机功能是基于网络通信实现的。

在Unity中,可以使用Unity内置的网络组件来实现多人联机。

其中,最常用的网络组件是UNET(Unity Networking)。

UNET提供了一套完整的网络通信解决方案,包括服务器端和客户端的网络通信功能。

通过UNET,开发者可以轻松地创建多人游戏,并实现玩家之间的实时通信与交互。

在使用UNET时,首先需要创建一个服务器端和多个客户端。

服务器端负责接收和处理客户端的网络请求,并将游戏状态同步给所有客户端。

客户端则负责发送网络请求给服务器端,并接收服务器端发送的游戏状态。

在游戏开始时,客户端会向服务器端发送连接请求,服务器端会为每个客户端分配一个唯一的网络标识符。

客户端和服务器端之间的通信是通过网络消息实现的,消息可以是玩家的操作指令、游戏状态更新等。

服务器端会将接收到的消息广播给所有客户端,以保持游戏状态的同步。

客户端接收到服务器端发送的消息后,会更新游戏状态,并将本地玩家的操作指令发送给服务器端。

通过这种方式,多个玩家可以同时在不同的客户端上进行游戏,并实时地看到其他玩家的操作。

服务器端负责协调和同步所有玩家之间的状态,从而实现多人联机游戏的效果。

在实现多人联机功能时,还需要考虑网络延迟和带宽等因素。

为了减少延迟,可以使用一些优化技术,如预测和插值,来平滑玩家之间的移动和交互。

还可以使用网络同步对象来实现更精细的同步控制。

网络同步对象是指需要在多个客户端之间同步的游戏对象,如玩家角色、NPC等。

通过对网络同步对象进行设置,可以控制其在不同客户端之间的同步方式,从而实现更好的游戏体验。

总结起来,Unity的多人联机功能是基于UNET实现的。

通过服务器端和客户端之间的网络通信,可以实现多个玩家在不同客户端上进行实时的游戏交互。

Unity 连接WebService的总结

Unity 连接WebService的总结

Unity 连接WebService的总结:主要是通过WWW类来操作方法一:如果是C/S架构的话,可以通过在Mono中添加服务引用如下图:另外需要到Mono目录下把下面三个dll文件放到工程目录下这样即OK.方法二:直接把服务地址填到下面的位置:Edit->Project Setting->Editer:这种方法不需要在MONO中进行引用,也不需要那三个dll文件,比较方便,目前还没发现什么问题。

以上两种方法在发布为PC客户端的时候没有问题;但是在发布为Web版本的时候就不行了,方法一由于引用了那三个dll文件,所以根本就不能发布出来,还报错,(注意,当以Web的形式发布的时候系统编译会报错,发布失败,这时如果还在编辑环境运行的时候也会报错,这是因为系统已经认为你还是在Web模式下编译,这时只要再发布一个PC的客户端的EXE文件就行了);方法二:可以发布出来,但发布出来后,运行有错误提示,如下图:这是因为在Web运行是UnityPlayer服务器的安全策略有要求,所以会报这个错误;解决办法,在Webservice的目录下(网站根目录下)建一个名为“crossdomain.xml”这个文件,内容是:<?xml version="1.0" encoding="ISO-8859-1"?><cross-domain-policy><allow-access-from domain="*"/></cross-domain-policy>并且必须是ASCII这个编码格式,(这个编码可以在VS环境里修改)完成后再刷新如下图,OK;代码截图:using System;using System.Collections;using UnityEngine;public class WebServiceTest : MonoBehaviour {// Use this for initializationpublic string RtxID;public GUIText text;public GUIText error;System.Xml.XmlDocument xd = new System.Xml.XmlDocument();string webUrl;void Start () {webUrl = "http://192.168.118.1:808/WebService1.asmx/RTXUser";StartCoroutine(CheckGuestScores());}// Update is called once per framevoid Update () {//Debug.LogError("sdf");}public IEnumerator CheckGuestScores(){WWWForm form = new WWWForm();form.AddField("RTXID",RtxID);WWW www = new WWW(webUrl,form);yield return www;error.text = www.error;//print(www.text);text.text = www.text.ToString();//xd.LoadXml(www.text);//int str = www.text.GetHashCode();//error.text = xd.SelectSingleNode("/").Value.ToString();//Debug.LogWarning(xd.SelectSingleNode("/").Value.ToString());//data = www.text;}}。

网络游戏开发中的服务器配置技巧

网络游戏开发中的服务器配置技巧

网络游戏开发中的服务器配置技巧随着互联网的快速发展,网络游戏已成为人们生活中不可或缺的娱乐方式。

而网络游戏的运行需要一个稳定可靠的服务器来支持。

服务器的配置对游戏的运行速度、稳定性和用户体验有着直接的影响。

在网络游戏开发中,服务器配置技巧至关重要。

本文将介绍一些在网络游戏开发中常用的服务器配置技巧,以帮助开发者优化游戏的性能和用户体验。

首先,服务器的硬件配置是影响游戏性能的关键因素之一。

在选择服务器硬件时,需要考虑游戏的需求和预计负载。

通常情况下,服务器需要具备高性能的处理器、大容量的内存和高速的硬盘。

处理器的选择应考虑其核心数、主频和缓存大小。

内存容量的选择应根据游戏的并发用户数和每个用户的数据存储要求。

硬盘的选择应保证读写速度快且容量足够。

此外,服务器的网络带宽也需要足够大,以确保游戏数据的传输速度和稳定性。

其次,服务器的操作系统选择也是重要的一步。

在网络游戏开发中,常用的操作系统包括Windows、Linux和BSD等。

选择操作系统时,需要考虑到游戏开发所需的软件环境、稳定性、安全性和易用性等因素。

Windows操作系统在易用性和兼容性方面表现较好,适合初学者或对Linux不熟悉的开发者。

Linux操作系统在性能和安全性方面表现较好,适合有一定经验的开发者。

BSD操作系统在稳定性和网络性能方面表现较好,适合大规模多人在线游戏的开发。

除了操作系统的选择,还需要对服务器进行适当的系统优化和安全设置,以提高游戏的运行效率和防止黑客入侵。

第三,游戏服务器的架构设计也是不可忽视的一环。

网络游戏一般采用分布式架构,即将游戏逻辑和数据分布在多台服务器上,以提高游戏的并发性和可扩展性。

常见的游戏服务器架构包括单一服务器架构、主从服务器架构和分布式服务器架构等。

单一服务器架构适用于小型游戏,所有游戏逻辑和数据都运行在一台服务器上。

主从服务器架构适用于中型游戏,一台主服务器处理玩家登录和全局逻辑,多台从服务器处理玩家间的交互。

Unity网络服务器搭建

Unity网络服务器搭建

Unity⽹络服务器搭建虽然unity出了Network,但是作为初学者还是有必要学习⼀下Socket,今天,给⼤家分享⼀个初级的⼩服务器搭建,当然是在Unity上实现的。

下⾯的的代码我都详细写了注释,本⼈也作为初学者可以留⾔交流。

[code]csharpcode:using UnityEngine;using System.Collections;//添加引⽤using ;using .Sockets;//咱们这⾥写个委托⽤来把数据传出来//不理解的童鞋可以把这⾏为理解为⼀种把服务器消息传出去的⽅式public delegate void ServerCallBack(byte[] contex);public class CreateServer {//写成单例,以⽅便在需要创建服务器时调⽤private static CreateServer _instance;private CreateServer() { }public static CreateServer GetInstance(){if (_instance==null){_instance = new CreateServer();}return _instance;}private Socket serverSocket;//创建服务器Socket对象private ServerCallBack serverCallBack;//传出消息的委托对象public void InitServer(ServerCallBack CallBack){//将委托对象传输进来serverCallBack = CallBack;//创建Sock,有两种重载,我⽤了三个参数的重载,分别是三个枚举(IP地址族,双向读写流的传输协议,Tcp传输控制协议)serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//绑定⽹络节点,设置所有ip都可以连serverSocket.Bind(new IPEndPoint(IPAddress.Any, 23456));//设置监听端⼝,可以同时连接1000个客户端serverSocket.Listen(1000);//接受客户端的请求,下⾯的ServerAccept()是⼀个回调⽅法,//⽤来服务器接受请求,看好是接受请求,不是接收数据serverSocket.BeginAccept(ServerAccept, serverSocket);}//在接受客户端请求后,需要回调⽤来接收数据⽅法//所以我们在这⾥建⼀个临时存储数据的数组,private byte[] serverbuffer = new byte[1024];/// <summary>/// 接受请求的回调⽅法/// </summary>void ServerAccept(System.IAsyncResult ar){//获取接受请求的套接字serverSocket = ar.AsyncState as Socket;//在回调⾥结束接受请求Socket workingSocket = serverSocket.EndAccept(ar);//接受完请求后,开始接收消息,看好是接收//BeginReceive(⽤接收消息的数组,第0个字节开始接收,接受的字节数,Socket标识符,接收消息之后的回调接受数据的⽅法)workingSocket.BeginReceive(serverbuffer,0,serverbuffer.Length,SocketFlags.None,ServerReceive,workingSocket);//下⾯写了⼀个尾递归//当接受完⼀个客户端的连接请求后,继续接受其他客户端的连接请求workingSocket.BeginAccept(ServerAccept, serverSocket);}/// <summary>/// 接收数据的回调⽅法/// </summary>/// <param name="ar"></param>void ServerReceive(System.IAsyncResult ar){//获取接收消息的套接字serverSocket = ar.AsyncState as Socket;//结束接受,这⾥返回接受数据字节数int count = serverSocket.EndReceive(ar);//如果有数据,接收消息if (count>0){//将数据通过委托,传送到外界serverCallBack(serverbuffer);}//下⾯再写⼀个尾递归//服务器成功连接到客户端后,继续接收当前客户端发来的消息serverSocket.BeginReceive(serverbuffer, 0, serverbuffer.Length, SocketFlags.None, ServerReceive, serverSocket); }}[code]csharpcode:下⾯就可以在任何地⽅创建服务器了/// <summary>/// 创建服务器/// </summary>void Server(){//后台运⾏Application.runInBackground = true;CreateServer.GetInstance().InitServer(Print);}//public delegate void ServerCallBack(byte[] contex);这是上⾯的委托/// <summary>/// 下⾯是定义⼀个跟委托类型相同⽅法/// </summary>/// <param name="msg"></param>void Print(byte[] msg){}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Unity3d 游戏开发之Web Player 的server端联网配置
新游戏出了第一个能跑完流程的版本,不得不佩服Unity3D强大的功力,PC、MAC OS、Linux、IOS、Android、web player,前天刚发布的unity3d 4.2版本还支持WINDOWS PHONE、Black Barry这些平台统统一键打包,so easy!不过在打包部署Web Player时,在联网方面出现了一点麻烦,算是顺风顺水过程当中的一个小插曲吧!所以又可以针对Unity3d Web Player 的server 端联网配置写一随笔咯。

以SmartFoxServer2X官方的Unity3d Example ”tris“为例,部署好服务器之后,在Unity 端跑游戏肯定没问题,成功连接。

但是当切换到Web Player打包方式,并且确定你连接的不是本机服务器,即--服务器端地址不为“LocalHost”或“127.0.0.1”时,会发现一个很“有趣”的现象(其实一点都不有趣啦,困扰哥好久-_-!~)--死活连接不上服务器了,不论是直接在Unity3D Editor中跑游戏还是打包好Web Player程序在浏览器中跑。

其中主要的错误描述为:
[SFS DEBUG] TCPSocketLayer: General exception on connection:
Unable to connect, as no valid crossdomain policy was found
at .Sockets.Socket.Connect_internal (IntPtr
sock, .SocketAddress sa, System.Int32& error,
Boolean requireSocketPolicyFile) [0x00000] in <filename
unknown>:0
at .Sockets.Socket.Connect (.EndPoint
remoteEP, Boolean requireSocketPolicy) [0x00000] in
<filename unknown>:0
at .Sockets.Socket.Connect (.EndPoint
remoteEP) [0x00000] in <filename unknown>:0
at .Sockets.Socket.Connect (.IPAddress
address, Int32 port) [0x00000] in <filename unknown>:0
at Sfs2X.Core.Sockets.TCPSocketLayer.ConnectThread ()
[0x00000] in <filename unknown>:0
经过摸索查阅资料后发现,这都是Unity WebPlayer Security SandBox机制的问题。

Unity3D官方的文档中解释这种现象:This security restrictions apply only to the webplayer, and to the editor when the active build target is WebPlayer. 和我遇到的现象描述相符。

说白了就是Unity3d为Web Player平台搞了一个security SandBox机制,Only在Web Player 的安全机制中,我们在使用Socket时需要服务器配置一个服务安全策略。

因为没有在这方面进行任何处理,所以Security SandBox阻止了程序的Socket连接,造成了以上的现象。

OK,问题找到了。

解决办法是:Unity提供了一个“sockpol.exe”这么一个工具,在
“...\Unity\Editor\Data\Tools\SocketPolicyServer“路径下有sockpol.exe和它的源码。

如果你的服务器端是Windows平台的话,直接Copy一个sockpol.exe到服务器端,在CMD中执行
sockpol.exe --all
即可为服务器端配置好Security SandBox安全策略。

说到这了,如果不认真读Unity3D官方关于Security SandBox的文档是不是还是有点云里雾里的,不禁要问了:这个sockpol.exe是什么神奇的东西呢?
OK,我们可以不读官方文档,来看一看sockpol.exe的源代码吧,刚才说了在
“...\Unity\Editor\Data\Tools\SocketPolicyServer“路径下有sockpol.exe的源码,从源码中很容易就分析出原来sockpol.exe干的活就是监听Web Player平台获取Security SandBox安全策
略时需要连接服务器端的843端口,监听到843端口有请求时,发送给请求的客户端一个crossdomain.xml配置,内容为标准的crossdomain.xml文件格式:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="1-65536"/>
</cross-domain-policy>
这样客户端就能获取到Security SandBox安全策略并进行网络活动了。

其中,执行sockpol.exe的参数--all的意义就是设置服务器的Security SandBox安全策略为允许任何IP访问服务器的任何端口。

知道了这个原理,Linux服务器端就很容易能得出解决方案了,我们利用Linux的NetCat(NC)工具写一个脚本,以达到同样的目的。

首先,确认Linux服务器安装了NetCat,在SHELL中键入‟NetCat…或者…NC‟测试一下你的系统中有没有安装这个工具。

如果没有反应,很简单,安装一个。

#如果你用RedLinux或者RL系的Linux:sudo yum install nc#如果你用Ubuntu\Debian 之类Linux:sudo apt-get install nc
安装NC后,写一个脚本:
#!/bin/sh
while true; do echo '<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="1-65536"/>
</cross-domain-policy>' | nc -l 843; done
保存为serverPolicy.sh
别忘了拿到脚本权限
sudo chmod 755 serverPolicy.sh
直接运行脚本:
sudo ./serverPolicy.sh
如果没有报错的话,OK,成功为服务器端设置了Unity3D Web Player平台的Security SandBox安全策略。

接下来做的就是测试咯!
对了,直接跑这个脚本的话会很麻烦,因为这时脚本还依赖于SHELL,当我们断开SHELL或者要在SHELL做其他活动时,脚本会停止运行。

让脚本在后台运行的方法:文章出处狗刨学习网sudo nohup ./serverPolicy.sh &
OK,enjoy!。

相关文档
最新文档