unity 游戏客户端开发 pc客户端是什么意思思

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
基于Unity3D的手机游戏客户端的设计与实现
下载积分:1500
内容提示:基于Unity3D的手机游戏客户端的设计与实现
文档格式:PDF|
浏览次数:30|
上传日期: 01:38:05|
文档星级:
该用户还上传了这些文档
基于Unity3D的手机游戏客户端的设计与实现.PDF
官方公共微信ZentertainSlots招聘
Unity3D游戏客户端开发工程师
分享到微信
本科及以上
职位诱惑 : 弹性工作 五险一金 硅谷风格 前景巨大
发布时间:11:30发布
岗位职责:
1、使用Unity开发IOS、Android、WP跨平台游戏2、负责游戏前端的架构,模块设计以及代码实现3、与服务器端程序进行充分协商,完成接口设计4、与策划和美术进行协作,完成设计内容
任职要求:
1、热爱游戏,对游戏开发抱有极大的热情,关注游戏体验2、熟练掌握C++或者C#,有一年以上使用Unity引擎开发的经验3、熟悉Java,Lua,Javascript,Flash AS或者Shader语言者优先4、有较强的责任心,善于学习,良好的团队精神5、具有良好的沟通能力,为人踏实,积极主动
你在拉勾还没有简历呢,你可以,也可直接投递
领域 移动互联网,游戏
规模 50-150人
目前阶段 A轮
投资机构 红杉资本(A轮)
朝阳门银河soho
领域:游戏
阶段:成熟型(D轮及以上)
规模:500-2000人
领域:游戏
阶段:成熟型(C轮)
规模:500-2000人
领域:游戏
创始人:杨圣辉
阶段:成长型(B轮)
规模:500-2000人
领域:移动互联网
创始人:晨希
阶段:成长型(不需要融资)
规模:50-150人
领域:移动互联网,电子商务
创始人:陈德文
阶段:上市公司
规模:2000人以上
附件简历:
暂无附件简历
默认使用此简历直接投递,下次不再提示
请选择你要投出去的简历:
在线简历:
在线简历还不完善,请完善后选择投递
附件简历:
暂无附件简历
默认使用此简历直接投递,下次不再提示
支持word、pdf、ppt、txt、wps格式文件文件大小需小于10M
注:若从其它网站下载的word简历,请将文件另存为.docx格式后上传
简历上传成功!
你可以将简历投给你中意的公司了。
详情描述:
还可输入500字
请上传标准格式的word简历
操作说明:
打开需要上传的文件 - 点击文件另存为 - 选择.docx - 保存
上传文件大小超出限制
单个附件不能超过10M,请重新选择附件简历!
你的简历中:
学历、工作年限、期望工作城市与该职位要求不匹配,确认要投递吗?
简历已经成功投递出去了,请静候佳音!()
邀请好友成功注册拉勾,可提升每日投递量 &&
投递了该职位的人还投递了
你还没有可以投递的简历呢
请上传附件简历或填写在线简历后再投递吧~
投递失败:今日你已投递10个职位,投递数达到上限。
邀请好友加入拉勾网,可快速提升投递数量。
你在拉勾还没有简历,请先上传一份
支持word、pdf、ppt、txt、wps格式文件,大小不超过10M
登录邮箱未验证
请验证你的登录邮箱以使用拉勾网的所有功能!
我们已将验证邮件发送至:,请点击邮件内的链接完成验证。
我们已将激活邮件发送至:,请点击邮件内的链接完成验证。
你已成功收藏该职位
3月9日当天可进入“”页快速投递简历
今天已经反馈足够多了,给产品经理点时间消化下吧~
&&反馈提交成功!
你还没填任何反馈呢由于您使用IE6浏览器版本过低,可能会造成无法正常浏览网页,建议升级浏览器后继续使用。
选择工作城市 最多选择5个地点
最多选择5个地点
&销售热线:010-4
&销售热线:010-4
&销售热线:010-4
社会招聘APP
校园招聘APP
成都游外游科技有限公司
行业:网络游戏
性质:民营/私企
规模:51-100人
成立年份:2013
注册资金:100万
查看HR的联系方式
四川成都市
四川成都市
四川成都市
四川成都市
四川成都市
四川成都市
四川成都市
四川成都市
热搜职位:
各地人才网:
最近入职的人平均每天申请 30 个职位,你还差几个?赶紧申请吧!
客服:400-671-1818
销售:010-4
安全与帮助
ICP经营许可证编号&&京ICP证000065号&&京ICP备号&&京公网安备号
Copyright (C) 英才华网网络技术(北京)有限公司 &版权所有Unity3D客户端和Java服务端使用Protobuf - 游戏开发者
- 博客频道 - CSDN.NET
12167人阅读
前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖到现在才写这篇文章,不好意思哈。
本文测试环境:
系统:WINDOWS 7(第3、6步)、OS X 10.9(第4步)
软件:VS 2012(第3、6步)、Eclipse(第5、6步)
硬件:iPad 2(第4步)、Macbook Pro Mid 2012(第4步)
文章目录:
1、关于Protobuf的C#实现
2、为什么有些Protobuf发布到iOS就用不了,甚至有些在PC都用不了?
3、手动处理C#版本的Protobuf
& & 3.1、创建一个C#工程,先手动创建每一个要通过Protobuf序列化或反序列化的数据模型类,然后导出dll
& & 3.2、创建一个用于序列化的C#工程,然后运行生成dll
& & 3.3、将上面两个工程生成的dll拖到unity中
4、在Unity中反序列化Protobuf
5、服务端Java也用Protobuf
6、太烦了?!客户端也要自动处理Protobuf
1、关于Protobuf的C#实现
首先,U3D里面Protobuf使用的是C#的实现,那么目前有几个可选的C#实现:
C#: /p/protobuf-csharp-port
C#: /p/protosharp/
C#: /protobuf/
C#/.NET/WCF/VB: /p/protobuf-net/
我这里选用的是/p/protobuf-net/(你可以在&这里下载到他的代码和工具),它比较好的一点是,提供了各种平台的支持,解压后在“Full”目录中可以看到各个平台的支持。(现在google被各种封杀,如果你打不开上面的地址,可以下载我上传到CSDN的,里面的csharp文件夹就是各个平台的protobuf需要的dll,点击下载)。
看到里面的unity了吗,它里面的protobuf-net.dll将是我们准备用到的。
2、为什么有些Protobuf发布到iOS就用不了,甚至有些在PC都用不了?
a、Protobuf使用了JIT,即在运行时动态编译,而这个特性在Unity发布到iOS时候是不支持的。因此,会导致你在PC上可以正常运行,发布到iOS就有问题。
b、Protobuf是基于.net 2.0以上框架写的,而Unity仅支持.net 2.0,或者有些使用2.0中比较多的特性,而你在Unity中发布设置了.net 2.0的子集。后者你只需要在Player setting中修改设置就可以了。
上面两项也可适用于其它第三方类库,如果你自己下载了一个在PC上或C#里面能正常使用的类库,在U3D里面就不能用了,那么请检查是否是上面两条原因导致的。
3、手动处理C#版本的Protobuf
知道了上面问题,我们只要选一个.net2.0的Protobuf,然后它又不是JIT,那就可以正常使用了。
这里用的思路是:
& & 3.1、创建一个C#工程,先手动创建每一个要通过Protobuf序列化或反序列化的数据模型类,然后导出dll
& & & & 以VS为例,首先,创建一个类库工程:“文件”&&新建&&&项目&&&类库&(记得选择 .net framework 2.0)
将unity的protobuf的dll添加到项目引用
然后假设你有一个类WorkerInfo是需要通过Protobuf进行序列化和反序列化的,那么创建一个WorkerInfo类,内容如下:
using System.Collections.G
using System.T
using ProtoB
namespace Com.YourCompany.Project.Proto.Module{
    [ProtoContract]
    public class WorkerInfo { 
        [ProtoMember(1)]
        public int workerId;
        [ProtoMember(2)]
        public int leftClosingTimeS
        [ProtoMember(3)]
        public int buildingId;
    }
}按下Shift+F6生成dll,在项目的bin\Debug目录下就可以找到ProtoModelDLL.dll了
& & 3.2、创建一个用于序列化的C#工程,然后运行生成dll
& & & & 也是以VS为例,首先创建一个控制台应用程序:“文件”&&新建&&&项目&&&控制台应用程序&(记得选择 .net framework 2.0)
将Protobuf和3.1生成的dll添加到引用
在项目生成的Program.cs中写入:
using System.Collections.G
using System.T
using ProtoBuf.M
using ProtoB
using Com.YourCompany.Project.Proto.M
namespace ProtoModelSerializerCreator
class Program
static void Main(string[] args)
var model = TypeModel.Create();
model.Add(typeof(object), true);
model.Add(typeof(WorkerInfo), true);
model.AllowParseableTypes =
model.AutoAddMissingTypes =
pile(&ProtoModelSerializer&, &ProtoModelSerializer.dll&);
然后ctrl+F5运行,这时候你就可以在bin\Debug中看到ProtoModelSerializer.dll。
& & 3.3、将上面两个工程生成的dll(ProtoModelDLL.dll和ProtoModelSerializer.dll)以及protobuf-net.dll拖到unity中
& & & & 怎么用?看第4步
4、在Unity中反序列化Protobuf
由于一般游戏客户端请求的数据量比较简单,也比较少,因此我们前端请求是不直接二进制请求。而前端收到后端返回才采用了Protobuf,因此。这里只讨论Protobuf的反序列化。
代码很简单,下面写个测试代码:
using UnityE
using System.C
using ProtoBuf.M
using Com.YourCompany.Project.Proto.M
using System.IO;
using Com.Duoyu001.Proto.B
using Com.Duoyu001.Proto.W
public class TestProto : MonoBehaviour
void Start ()
byte[] dataFromServ = new byte[]{8, 233, 7, 16, 100, 24, 1}; //these bytes are generated by server
RuntimeTypeModel serializer = ProtoModelSerializer.Create ();
System.IO.MemoryStream memStream = new System.IO.MemoryStream ();
WorkerInfo w = new WorkerInfo ();
serializer.Deserialize (memStream, w, w.GetType ()); //asign value to proto model
Debug.Log (w.workerId + &, & + w.buildingId + &, & + w.leftClosingTimeSec);
运行后Unity控制台输出了worker的信息。代码中的dataFromServ字节数组的内容实际应该是通信时候后端返回的。这里测试就不涉及Socket通信的知识了。
5、服务端Java也用Protobuf
看到一个客户端用Protobuf这么麻烦,那后端会怎样呢?其实后端是比较简单的,有Google官方的支持。
下完解压是这样的(2.5.0):
进入“protobuf-2.5.0\java”文件夹,里面是一个maven项目,你直接用maven clean install在target目录就会生成一个protobuf-java-2.5.0.jar的jar包了,没maven的在这里下载吧,我用maven生成的。这个要时候导入你的Java项目。就可以了。
然后你写一个proto文件,调用“protobuf-2.5.0\src”里面的protoc.exe进行生成,它会帮你生成一个java文件。(详细看),我这里有提供一个bat,用于调用protoc来生成java文件的,手动输入的话太麻烦了。在windows下把它保存到.bat然后双击运行就可以了。
echo ** setting runtime variable
REM _protoSrc 是你的proto文件目录的位置
set _protoSrc=F:\project_proto_src\trunk\xgame-controllers\protos
REM protoExe 是用于从proto生成java的protoc.exe程序的位置
set protoExe=C:\Users\john\Desktop\protobuf-2.5.0\src\protoc.exe
REM java_out_file 存放生成的Java文件目录的位置
set java_out_file=F:\project_proto_src\trunk\xgame-controllers\src\main\java\
for /R &%_protoSrc%& %%i in (*) do (
set filename=%%~nxi
if &%%~xi&
== &.proto& (
%protoExe% --proto_path=%_protoSrc% --java_out=%java_out_file% %%i
OK啦,这样你只要把生成的Java复制到或直接生成到你的Java项目源码目录中,然后就可以使用了。比如:
以前面说的WorkerInfo为例
package com.duoyu001.
import java.util.A
import com.duoyu001.xgame.worker.proto.WorkerInfoBuilder.WorkerI
public class TestProto {
public static void main(String[] args) {
WorkerInfo w = WorkerInfo.newBuilder().setBuildingId(1)
.setLeftClosingTimeSec(100).setWorkerId(1001).build();
byte[] byteArray = w.toByteArray();
System.out.println(Arrays.toString(byteArray));
控制台就会输出:
细心的同学会发现这里的字节和上面的“8, 233, 7, 16, 100, 24, 1”有点不太一样。第二个数字分别为-23和233.
其实,这个只是byte的有无符号的表示差异而已。
他们的二进制表示都是:
6、太烦了?!客户端也要自动处理Protobuf
我们看到客户端没加一个类,都需要在两个VS项目中增加代码,而后端是直接根据proto文件生成代码的。这样,好像有点不公平,而且这样前后端还是可能会写出不一样的结构。其实用protobuf我个人觉得最大的好处:
& & a、数据量小
& & b、通过proto模板生成代码,减少前后端联调
但是现在只是后端减少了工作,前端并没有减少,因此第二个好处不是很明显。
那好吧。我没有就这样满足。因此,我决定,前端也要根据proto来生成cs文件。
因此,我使用Java编写了一个解析Proto文件的工具,并且根据proto生成cs文件,然后用bat调用vs的命令行执行vs项目的构建,最后生成两个dll。
我把上面的命令都整合到一个bat中,因此这个bat的任务是:
执行java程序,把proto文件生成cs文件。
调用vs接口构建两个vs项目,生成两个dll。
通过svn把这两个dll提交到客户端的主干上。
调用上面根据proto生成java的bat片段,生成java代码。
通过svn把生成的java代码提交到服务端主干上。
因此,这样一来,现在只要编写好proto文件,然后双击bat,前后端就都可以通过更新svn来获取最新的Protobuf数据对象。
根据proto生成cs文件并编译执行两个vs项目,然后把生成的dll提交到svn上
生成java代码并提交svn
这一步相关操作大家有兴趣可以自行试试,有问题欢迎在本博客讨论。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:290177次
积分:4434
积分:4434
排名:第2824名
原创:77篇
译文:38篇
评论:354条
有意向投资或合作手游开发的,可以联系本人:QQ
喜欢火影、喜欢Java、喜欢Unity3D、喜欢游戏开发的都可以加入木叶村Q群:
(1)(3)(3)(2)(2)(1)(2)(7)(10)(3)(12)(3)(1)(1)(3)(3)(2)(1)(1)(2)(4)(2)(1)(2)(2)(13)(19)(2)(3)(8)}

我要回帖

更多关于 轻客户端是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信