unity3d开发联网游戏开发直接用Socket还是用Photon sever好

Photon 是一个实时多人游戏开发框架,它是快速、精益和灵活的。&
Photon服务器功能强大,能够满足一般的中小型网络游戏的需求,而且开发效率高,所以就称为了大多数开发者的首选。由于网上关于Photon联网的介绍内容比较少,现在小義就跟大家分享一下关于Photon的内容。
首先Photon的官网地址:&
这是Photon Sever SDK下载地址&
Photon Sever SDK提供了一个集成的服务器,在开发联网游戏的时候,就不需要我们自己来架设服务器啦!下载第一个版本的Sever,就是普通的Photon Sever SDK,其可以运行在本地和云上等。
这是免费版本的PUN SDK下载地址:&
利用PUN开发联网游戏的优点有:&
(1)、不需要自己搭建服务器,运行在Photon Cloud上;&
(2)、可以支持多种Unity导出平台,比如:Web、PC、和等;&
(3)、Photon所有的特性都是实时的。
那下面就来了解一下Photon Sever SDK,因为它是我们开发联网游戏的服务器,所以首先需要设置好服务器。&
将下载好的Photon Sever SDK解压,之后打开Photon-OnPremise-Server-SDK_v4文件夹,其下有几个文件夹需要重点解释一下。
Photon Sever的目录结构
1、deploy目录&
& & 这是Photon Sever的启动目录,这里需要重点介绍一下。&
& &(1)、bin_tools目录&
& & & & 其下存放的是Photon Sever的一些工具,比如7zip是压缩和解压的工具,因为不是重要内容这
& & 里就不展开介绍啦。&
& &(2)、bin_Win32/bin_Win64目录&
& & & & 这里面是Photon Sever的启动目录,如果本地PC的操作系统是64位的就打bin_Win64下的
& & PhotonControl可执行文件,如果本地PC的操作系统是32位的那就打开 bin_Win32下的
& & PhotonControl可执行文件。
2、lib目录&
& &lib文件夹中存放的是一下库文件,比如说Photon3.dll文件等。
3、doc目录&
& & doc目录下存放的是一些关于Photon Sever的介绍和关于Photon Sever开发的API。
启动Photon Sever&
打开PhotonControl可执行文件,单机小图标,之后选择LoadBalancing(My Cloud),启动应用程序即可。&
其他选项:&
1、Photon Control&
查看当前Photon Sever的版本号。&
2、License Info&
License文件信息,可以显示最多连接人数等。&
3、Get Your Free License&
下载免费的License,使最大连接数到达100个,如果是默认的话,最大连接数只有20个。&
4、Game Sever IP Config&
可以查看当前服务器的IP地址,也可以设置IP。&
5、Open Logs&
查看打印日志信息,可以看到连接服务器是否成功等信息。&
6、Exit Photon Control&
退出Photon Sever服务器。
本文已收录于以下专栏:
相关文章推荐
Instantiating Networked Objects 实例化网络化的对象
In about every game you need to instantiate one or more p...
最近游戏进入最后测试和接入sdk阶段,对接了多个sdk简单记录和分享一下在接入各个渠道sdk中遇到的问题和坑,在之后或其他人看到之后可以绕过,提高效率仅此而已。
我们使用的unity开发,在选择sd...
分享一些Photon的文章,翻译不准确的地方请多多包涵。
Master Server And Lobby 主服务器和大厅
PUN always uses a master server and one or more game servers. The ma...
Photon是个好东西,但是网上的入门教程太少了,特别是中文版的。小弟就自己琢磨吧,下面一系列是对Photon的研究过程,如有哪个地方写的有误,望请前辈指教。
首先去PhotonServer SDK下...
Photon产品众多,大体上可以分为photon server
和Photon PUN两大类,Photon PUN就是之前的Photon
Cloud,只是改了一个名字。
Photon server是...
Remote Procedure Calls 远程过程调用
Remote Procedure Calls (RPCs) are exactly what the name implies: meth...
此教程属于NGUI的具体操作,主要描述怎么制作一个游戏中的UI,相对来说比较简单,熟能生巧哇,动手操作一遍就可以完全掌握的。
1,在PS里面设计好要做的UI,然后切片成很多个png的图片(这属于美工...
最近打算做实时对战的类似lol的游戏,也在学习使用Photon服务器,就分享一下。这可能是一个系列文章。记录一下学习过程,分享一下经验收获。
今天先介绍一下Photon服务器是什么,可以做什么,为什么...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)漫谈游戏开发和Unity3D(上)
Unity3D是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型创作工具,游戏开发和Unity3D漫谈系列上部分。
天神传、最终幻想V、神庙逃亡2、武士2复仇、仙剑奇侠传OL、调教三国、小小忍者、绝代双骄,这些耳熟能详的游戏是怎样开发出来的?下面给大家带来的是游戏开发和Unity3D漫谈系列上部分,首先说明下这不是强类型技术文章。
Unity3D简介
Unity3D是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型创作工具。Unity类似于Director,Blender,Virtools或Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Wii、OSX或iOS平台。也可以利用Unity web player插件发布网页游戏,支持Mac 和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。
演示高铁惊魂、打炮弹。
Unity3D:跨多平台(IOS、Android、Windows Phone、Windows、Flash、XBOX360、-PS3、Wii等)游戏引擎,可以开发2D、2.5D、3D游戏。appstore手机上有1500+款用Unity3D开发的游戏。
什么是游戏引擎?开发简单、高度封装(OpenGL、DirectX)。其他游戏引擎: Cocos2d、UDK、 Unreal Engine 3、 Quest3D 等。
Why Unity3D? 跨平台、费用便宜(非开源,有免费版)
游戏开发待遇
Unity3D手机2D游戏开发,试用期工资8.5k以上
5000以下占25%、元占23%、1万以上占16%,金山奖励《剑侠世界》的项目组成员,3辆宝马3,4辆马自达6
游戏开发常识
手游(新增长点)、网游(捉迷藏OL,U3D)、端游(需要下载客户端)、页游(WebGame)
FPS(First Person Shoot/Frame Per second)、MMO( Massively Multiplayer Online,大型多人在线)、RPG(虚拟人生,浪漫庄园)
2.5D(用2D模拟出来的3D,中国2D网游占据8成市场)、锁定视角3D(视角固定,不足够炫,但是不头晕,开发难度低,建模建3面即可)
第三人称、第一人称
单机游戏,网络游戏:大公司使用自主引擎,中小公司使用Java开发的 smartfoxserver 、C#开发的Photon(底层C++) 等
运营商、游戏代理、渠道商:开发商自己要处理推广、支付、打击盗版等,一般和渠道商合作分成。比如《捕鱼达人》android版90%收入来自渠道,Android手机游戏开发的困境,渠道太多,N多打包
游戏公司分工
主要分为策划、美工、程序员、测试、客服等,黑话:主程、主美。
Unity3D基本使用
通过一个例子理解Unity3D开发工具使用(对坐标系暂时先了解)
Hierarchy中Create一个Cube立方体,在Inspector中修改它的Position XYZ为0
添加一个光源照亮场景Directional light,Position XYZ为(0,2,2)
修改摄像机MainCamera(摄像机看到的就是屏幕看到的)的Position为(0,2,-6),看起来清楚一些
Project中Create一个C# Script,编写一个拖动Cube旋转Cube的功能。见备注,先粘贴过来能运行即可
把脚本拖到Cube上(拖到Hierarchy中比较准确)
点击在模拟器中启动运行,再点击停止运行
项目的保存和再次加载:一般打开unity场景文件
第一个例子解析
Unity支持C# 和 JavaScript,国内用C#的占大多数。 JavaScript不是标准语法,叫UnityScript更合适。使用Mono实现C#跨平台,C#编辑工具也是MonoDevlop。如果Unity提示代码编译错误,则到MonoDevelop中Build一下就能看到是什么错误。脚本要取有意义的名字,脚本的名字要和类名一致。
Start、Update是系统预定义的一些方法,当相应事件发生的时候系统就会调用脚本的相应方法,后续还有OnMouseDown、OnGUI,为了简化这些方法不是override父类的用法,类似于Main的调用约定。
脚本是依附于游戏对象的,事件和操作的对象也是当前脚本所在的游戏对象。脚本只能依附于游戏对象或者由其他脚本调用才会运行,一个脚本可以放到多个游戏对象上,是多个实例。一个脚本的多个实例和其他脚本之间互不干扰。
项目运行过程中的修改不会保存。其实相当于调试时改代码立即生效的功能,只是调试结束一切调试期的修改都消失
抗锯齿:主菜单→Edit→Project Settings→Quality,AntiAliasing选为4x(越大越平滑但是越占资源)
体验跨平台:File→Build Settings,构建为exe、flash,如果有android、ios等开发环境还可以构建为手机软件。
理解和美工的分工:在3dsmax中设计出3d模型、贴图出来(打开“希腊圣殿场景”),然后ribbon按钮→导出成FBX格式,FBX拖入Project,接着把模型拖入到Hierarchy,调整它的坐标。把旋转脚本拖到“圣殿”上这样圣殿也就跟着一起旋转了,把Cube的脚本去掉(Inspector中Remove掉Component即可)这样Cube就不旋转了。必须按照Unity3D标准要求设计的3dsmax才能正确导入,资源下载地址:
等。项目路径和FBX文件名不要有中文。
编辑器的使用
Scene:高效操作,按住鼠标右键拖放可以改变预览的时候看的方向、按住滚轮拖放可以横向改变看的部分、滚轮可以前进后退、Hierarchy中双击可以聚焦到元素,放大区域、点击按钮选中一个游戏对象拉着三个方向的箭头就可以在三个方向修改元素的位置。方向键可以更方便的在XZ方向漫游,按着Shift可以加快速度。Hierarchy中Create的时候会自动在当前坐标创建对象,方便建模。
Inspector:暂时想禁用试一下的游戏对象可以在Inspector前的钩去掉、暂时想禁用一下的组件也可以把钩去掉,永久删掉就Remove Component。
Unity多开:建一个快捷方式加上-projectPath参数即可。
C#脚本不支持命名空间,脚本在Project中的显示名称不要加cs,类名要和cs名称一致,所有类继承自MonoBehaviour。跟具体游戏对象无关的脚本可以放到摄像机MainCamera中。不要不正确的给一个游戏对象设置多个脚本对象
初始化不要放到构造函数中,而是放到Start()方法中。
放到游戏对象中的脚本(实例化)可以在Inspector中修改属性,get/set写法属性不被识别,直接public字段就能当属性用,private或者不写修饰符就是私有字段。
脚本中文问题:代码中有中文的话会有乱码问题。到资源管理器中打开项目的Assets文件夹(或点右键Show In Explorer),用unity3d目录下的Editor\Data\Tools\UniSciTE下的UniSciTE.exe打开cs文件,File→Encoding改为UTF-8 with BOM,敲个空格造成修改,然后保存即可(可以修改cs文件打开方式更简单)最好一开始就修改编码,否则会很麻烦。
程序的调试
程序的运行时调试消息输出:Debug.Log(),显示到Console视图(window→console打开)
项目的断点调试:启动MonoDevelop,主菜单Tools→Options→Unity→Debugger的Editor选择Unity开发环境Unity.exe的程序的路径、然后MonoDevelop打开项目(注意Unity不要同时打开这个项目),然后主菜单Run→Run With→Unity Debugger就可以启动调试了。建议使用Debug.Log()调试,优秀程序员的素质。
无论摄像机拍到的图像时怎么变的,GUI永远是显示在屏幕上,不受变形、碰撞、光照的影响。
GUI部分是每帧擦除重绘的,只应该在OnGUI中绘制GUI,按钮:GUILayout.Button(“Hello”); 只读标签:GUILayout.Label()
修改控件的颜色:GUI.backgroundColor = Color.设置背景色,GUI.color设置前景色,影响OnGUI中之后的控件直到下次修改颜色为止。
Hierarchy中的游戏对象不一样,OnGUI是每帧擦除重绘的(有可能一帧调用多次)。GUILayout.Button("Hello")应该理解为画一个Button控件而不是创建一个Button控件:
if(tick%100&50)//每50帧画一次Buton
GUILayout.Button("Hello");
因此,TextBox的输入要成员变量保存当前的值,否则输不进去。 GUILayout.TextField("yzk"),参数为要显示的值,返回值为用户输入的值。 username = GUILayout.TextField(username);
按钮的点击
响应按钮点击:GUI中没有事件概念,鼠标点击了按钮Button返回值就是true,例如:
if(GUILayout.Button("Test"))
Camera.mainCamera.transform.Translate(Vector3.back);
思考下面的代码有什么问题,怎么解决:
if(GUILayout.Button("Test"))
GUILayout.Label("Clicked Test");
案例:实现登陆功能,显示登陆结果。演练一下,常见错误:OnGUI大小写;文件编码、运行提示Compiler Error
GUILayout布局
GUILayout布局默认会伸展控件的尺寸。Button等控件支持params GUILayoutOption[] options可变参数数组,可以通过GUILayout.Width(30)返回一个设置控件宽度的GUILayoutOption对象, Height()、 MinWidth()、MinHeight()等同理,例子:
GUILayout.Button("Test",GUILayout.Width(500),GUILayout.Height(30))
GUILayout采用线性布局,类似于StackPanel,默认是纵向布局。通过GUILayout.BeginHorizontal();开启和GUILayout.EndHorizontal()结束一个横向排列区域,同理BeginVertical() 、EndVertical()。
如果嫌控件太挤,可以使用GUILayout.Space(30);增加若干像素的间隙。
常用GUI控件
密码框:pwd = GUILayout.PasswordField(pwd,'*'),第二个参数为掩码字符,注意帧刷新的问题。
Button只有鼠标抬起才会返回true,这样用Button做发射子弹就不能按下一直发射,可以使用RepeatButton,这样按下期间会一直返回true。案例:Button和RepeatButton实现游戏对象移动。
Tab页: electedToolBarId = GUILayout.Toolbar(selectedToolBarId,new string[]{"装备", "经验", "队友"}); 返回值为激活的按钮的序号。
复选框:isMuted = GUILayout.Toggle(isMuted, "静音");
多行文本区: msgBody = GUILayout.TextArea(msgBody,GUILayout.Width(300),GUILayout.Height(300));
滑动条:纵向,sliderValue = UILayout.VerticalSlider(sliderValue,0,100);返回值为当前值,第二个参数为最小值,第二个为最大值。HorizontalSlider()横向
区域Area,相当于一个控件的盒子,Area中的控件跟着Area移动,BeginArea()开始一个区域,参数指定区域的大小和坐标,EndArea()结束区域。
窗口,区域是没有边框和标题的,也不可以拖放。GUILayout.Window(0, new Rect(50,50,200,200),AddWindow1, "我的窗口"); 第一个参数为窗口的编号,第二个为窗口大小,第三个为void WindowFunction(int windowId)委托,用来绘制窗口内容。
窗口拖拽,在WindowFunction的最后调用GUI.DragWindow()可以启用全屏拖放(给DragWindow传Rect参数可以设定可拖放的区域)。考虑帧刷新的问题,要在OnGUI把Window()的返回Rect保存才可以可拖动,Start()中设定初始位置。
案例:点击【显示装备】显示装备窗口,点击窗口中的【关闭】按钮则关闭
贴图材质Material 画皮
无论是3D的游戏对象还是GUI,好看的效果都是贴图上去的。给Cube贴图:Project中新建Material,选择颜色或者图片,然后把Material拖到Cube上。给Sphere设定一个地球贴图。
给GUI贴图:给脚本增加一个Texture类型的public字段,GUI.DrawTexture(new Rect(100,100,100,100),MyTexture);把Texture画到界面上指定区域。直接把图片从Project拖到脚本的MyTexture属性上即可。
通过代码动态加载贴图:通过代码加载的贴图等资源需要放到Assets的Resources(固定的)目录下,然后Texture2D txt2D = (Texture2D)Resources.Load("meinv");加载。注意meinv这个名字是在Project中的显示的名称,不用带后缀,这个名字和物理文件名可以不一样,可以改名。
做项目是推荐定义public Texture的做法,这样可以方便美工修改贴图,便于分工。NGUI、EZGUI。
案例:用状态机做一个游戏主菜单和选项画面。
3D模型基础
Hierarchy显示的是界面上的游戏对象(GameObject),每个游戏对象都有。至少要有一个Camera,点击Camera就可以在Preview中看到摄像机的视角画面。每个对象(包括摄像机)有Position(位置)、Rotation(旋转,角度)、Scale(缩放大小)三组属性。
Unity3D采用的是:沿屏幕横向为X轴,沿屏幕纵向为Y轴,垂直屏幕方向为Z轴。右、上、背向观众三个方向为正方向。左手坐标系。
Vector3是Unity中定义的一个含有x、y、z三个字段的类,可以表示位置点,也可以表示一个向量。Vector3乘以数值表示对向量的三个值乘以相应的值, v1-v2则表示从v2指向v1的向量。(复习立体几何)
不要用Unity的拖拽开发,很难精细化调整,要手动修改Inspector中的属性。如果Unity的Scene视图显示不正常,就主菜单→Window→Layouts→Revert Factory Settings,恢复出厂设置即可。
常用:Cube立方体、Sphere球体、Capsule胶囊。
游戏对象移动
transform.Translate(vector3)让对象沿着vector3向量的方向移动,比如transform.Translate(new Vector3(0.2f,0.2f,0))就是z轴不动,向斜上方45度运动,每次运动的分量是x、y都是0.2。
Vector3类中内置了up、down、left、right、forward、back、 zero几个简化的静态成员。
鼠标判断:Input.GetMouseButtonDown(0)、GetMouseButtonUp、GetMouseButton。GetMouseButton也是只要按下就一直返回true。案例:键盘方向键控制元素移动。
键盘判断:Input.GetKeyDown(KeyCode.Space),Input.GetKeyUp(KeyCode.LeftArrow),Input.GetKey(KeyCode.A),GetKey像RepeatButton一样只要按下保持住就一直返回true。
案例点鼠标摄像头产生后坐力,按下左键摄像头back移动,松开左键摄像头forward移动。
游戏对象旋转
Unity是左手坐标系,比如transform.Rotate(Vector3.right);是大拇指指向右方,四指指向的方向就是旋转的方向。
案例:键盘控制对象围绕XY轴旋转。见备注。
练习:左右上下键控制摄像头摇头,滚轮(todo)控制摄像头前进后退
RotateAround(v1,v2,angle),元素围绕着世界坐标的v1点采用v2向量旋转angle角度。案例:FixedUpdate中transform.RotateAround(Camera.mainCamera.transform.position,Vector3.up,0.5f) 元素围绕着摄像头运动。
世界坐标和本地坐标
世界坐标系(world)与本地坐标系(local/self)。所有物体的世界坐标系都是相同的、不会改变。每个物体都有一个本地坐标系,当物体旋转时,本地坐标系统也会跟着物体一起旋转。
把Cube的Rotation改为(45,45,45),这样世界(world)坐标和本地(local/self)坐标就不一样了。transform.Translate(Vector3.forward)是向自己坐标前方,transform.Translate(Vector3.forward,Space.World)是向世界坐标前方。
转载自51it技术博客:
相关IT文章unity3D游戏开发之photon引擎初尝试_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
unity3D游戏开发之photon引擎初尝试
&&unity3D游戏开发之photon引擎初尝试
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢PhotonServer学习笔记 - Roger634 - 博客园
随笔 - 7, 文章 - 0, 评论 - 1, 引用 - 0
1. & PhotonServer的下载地址:
/en/OnPremise
2. &解压到指定的盘符即可,无需安装,
根据自己的电脑系统选择32bit或者64bit
3. &点击:PhotonControl.exe可以运行Photon
Loadbalancing文件夹中有两个示例工程
4. 我们开始搭建自己的服务器(手动眼斜)
在VS中新建一个类库工程:
5. 在工程中添加一下三个引用,文件在PhotonServer安装目录的lib文件夹中,三个dll分别是:ExitGamesLibs.dll,Photon.SocketServer.dll,PhotonHostRuntimeInterfaces.dll
6. 在此工程目录中添加入口类,继承ApplicationBase类,并实现其接口
7. &添加与客户端通信的类, 需要继承ClientPeer类(新版本的PhotonServer的构造函数已经改变,与客户端通信的类需要继承ClientPeer类,而不是之前的PeerBase类,实际上ClientPeer类继承的还是PeerBase类),并实现接口
8. 需要将这个工程文件生成发布到PhotonSever的目录下的deploy文件夹中,名字可以自己命名。我的文件为MyChatServer
9. 配置服务器:打开bin_Win64(如果你是32的就打开bin_Win32)文件夹下的PhotonServer.config
10. 打开后需要注销PolicyFileListeners标签,否则PhotonServer可能无法启动(什么原因我不清楚,反正我这就是这样)
11. 在Application标签下添加自己服务器配置文件,&ChatServer&这个就是我的服务器,其他两个&Master&与&Game&是自带的示例代码
Name:这个就是个名称
BaseDirectory就是我们发布后在deploy文件加下的路径:
Assembly:就是我们的类库工程生成的那个dll文件
&Type:我们入口类的名称(要带上命名空间)
&12. 启动服务器
13. Unity的客户端程序,需要在Unity中导入Photon3Unity3D.dll,如果你是在.nei的程序 & 可以用上面那个
14. 首先需要监听者, 创建一个监听类, 继承IPhotonPeerListener接口。并实现接口。
15. 就这样了,至于具体实现代码,网上代码还比较多}

我要回帖

更多关于 unity3d 联网卡 的文章

更多推荐

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

点击添加站长微信