怎么把unity3D项目投放到服务器上

怎么把unity3D项目投放到服务器上,第1张

unity3d应该在客户端运行吧,如果要多人从服务器端使用,一种解决方案是把unity3d运行在flash里面,客户端直接通过浏览器运行flash,然后在flash里面通过http/json和服务器交流数据

1Resources文件夹里东西越多越慢,能弄成ab包就尽量弄成,资源预知体什么的最好别放这文件夹下。

2建议使用brotli压缩方式。

3那就是服务器做缓存机制,了解webgl文件包的应该度知道其文件格式,主要数据在build文件下我测试了很多次加载过程,发现大部分时间都是在下载和解压unityweb后缀的文件上,而且unityweb这个文件永远没缓存过,所以在服务端加个缓存机制就成了,直接看效果吧。

虽然第一次慢但是后面就很快了,但是解压unity压缩包这块也是可以优化的。

1Resources 路径 只读 不能动态的修改

存放内容 预制体(prefabs) - 不容易变化的预制体

prefabs打包的时候 会自动过滤不需要的资源 有利于减小资源大小

主线程加载

Resources类的Load方法

文件夹中的内容打包的时候会被压缩和加密

2streamingAssetsPath 内容会原封不动的打入包中

一般建议存放一些二进制文件 (配置文件,unity资源包(AB文件)等)

特点

只读 不可写

主要存放二进制文件

通过WWW类 读取文件(移动端)

3persistentDataPath 特殊路径 唯一可读写的路径

这个路径在IOS平台是 应用程序的沙盒

但是在安卓Android平台上 它可以是程序的沙盒 也可以是SDcard

并且在打包输出的时候可以设置为沙盒或者SDcard

projectsettings - otherSettings - writePermission

可读写 不同平台路径不同 这个路径下的文件夹 首次运行程序时自动创建

热更新解决方案 将易变资源 还有逻辑 (10版本)放在streamingAssetsPath(资源包AB文件 配置表 Lua文本文件)

从网络端下载版本文件 读取出数据 对比当前服务器版本和本地版本版号 例如11版本 从服务器下载最新版本

更新的内容 大小等相关数据 MD5验证

  Unity会下载Assetbundle本地中,它的工作原理是先通过(版本号和下载地址)先在本地去找看有没有这个Assetbundle,如果有直接返回对象,如果没有的话,在根据这个下载地址重新从服务器或者本地下载。这里版本号起到了很重要的作用,举个例子,同一下载地址版本号为1的时候已经下载到本地,此时将版本号的参数改成2 那么它又会重新下载,如果还保持版本号为1那么它会从本地读取,因为本地已经有版本号为1的这个Assetbundle了。你不用担心你的资源本地下载过多,也不用自己手动删除他们,这一切的一切Unity会帮我们自动完成,它会自动删除掉下载后最不常用的Assetbundle ,如果下次需要使用的话只要提供下载地址和版本后它会重新下载。

  我们在聊聊Assetbundle 中的脚本,在移动平台下Assetbundle里面放的脚本是不会被执行的,还记得我们打包前给两个Prefab挂上了脚本吗?在手机上将Assetbundle下载到本地后,加载进游戏中Prefab会自动在本地找它身上挂着的脚本,他是根据脚本的名来寻找,如果本地有这条脚本的话,Prefab会把这个脚本重新绑定在自身,并且会把打包前的参数传递进来。如果本地没有,身上挂的条脚本永远都不会被执行。

  在Prefab打包前,我在编辑器上给脚本中的变量 name 赋了不同值,当Prefab重新载入游戏的时候,它身上脚本的参数也会重新输出。

  如果你的Assetbundle中的Prefab上引用的对象,那么这样做就会出错了,你需要设定他们的依赖关系。或者运行时通过脚本动态的载入对象。

1、根据需求理论上很简单,移动的客户端一直发送数据,比如是50毫秒发一次,同步的客户端接收到坐标移动的位置设置自己的坐标即可。可实际中没那么完美,由于网络的原因,不可能信息达到同步显示客户端也是50毫秒,这样显示客户端就会出现实现极不协调,如移动一下停一下的问题。

2、这里我提供一种方式内插值:首先是同步端先将接收数据保存在buf中。第一个buf的postion对应时间是50毫秒,第二个对应是100毫秒,第三对应是150毫秒以此类推。我们可以在buf长度等于3的时候,开始计算时间然后在Update即每一帧计算时间过去了多久,比如:第一帧时间是10毫秒,如果我们就用Vector3Lerp(第一个buf,第二个buf),得到当前位置。这样接收网络数据不断向buf中添加,update中根据buf不得去插值。这样人物移动就会平滑了。当前时间如果超过buf中最大时间,也就可以认为移动结束了。

咱们需要使用 Socket Policy Server

Unity3D 包含了一个简单的 Socket Policy Server (sockpolexe)

需要在启动自己的应用之前启动它

下面是在咱们的环境中,通过命令行打开服务器(Unity 42, Win 8)

>cd C:\Program Files (x86)\Unity\Editor\Data\Tools\SocketPolicyServer\

>sockpolexe --all

需要在调用WebSocketConnect 之前,调用SecurityPrefetchSocketPolicy,如下SecurityPrefetchSocketPolicy (

,

);

sqlite也可以支持服务器存储的;

支持跨平台,像很对安卓的应用可以找到它的影子;

sqlite是一个单文件的数据库文件系统,属轻型数据库,理论支持百万级数据量;性能方面不能但看数据库本身,还要看你的设计,设计的不好10万级有点悬;

另外,网络多应用共享时,容易造成死锁;

个人建议啊,要是做网络游戏,不太建议用sqlite做服务器数据库,到是可以做客户端内嵌的小型数据库。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 怎么把unity3D项目投放到服务器上

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情