1、photon 引擎 - photon 引擎的概述游戏引擎是指一些已编写好的可编辑游戏系统或者一些互交式实时图像应用程序的核心组件,是游戏软件的主程序,photon 引擎比起我们叫熟悉的虚幻 3、CryENGINE 3 等游戏引擎,这款引擎相对较为陌生,这里为大家简单描述一下这款引擎的特点。 Photon 英文原意是指光量子,在这里是指九城代理的服务端网络游戏引擎,比起其他服务器端引擎它能支持更多的 传输协议和 编程端口,如下图所示: Photon 包含两个部分。一部分是一个 socket 服务器,另一部分是其针对各个平台编写的sdk。这些平台包括了:android, Flash, iPhone
2、, iPad, .NET., Unity 3D, Windows,甚至还有silverlight。这也意味着 Photon 的发布也包括两个部分,Client SDK Release 和 Server SDK Update。 目前 Server SDK 的版本是 v2.4.5,而 Client SDK 的版本是 v6.2.0。 什么是 SDK?SDK 就是指可以为第三方开发者提供特定的软件包、软件框架、硬件平台、操作系统等创建应用软件开发工具的集合,并且 SDK 还能简单的为某个 程序设计语言提供 应用程序接口 API 的一些文件。photon 引擎 - photon 引擎的特性Photon
3、引擎是一款实时的 Socket 服务器和开发框架,快速、使用方便、容易扩展。 服务端架构在 windows 系统平台上,采用 C#语言编写。 客户端 SDK 提供了多种平台的开发 API,包括 DotNet、 Unity3D、C/C+以及 ObjC 等。Photon 引擎的体系特性如下: 1、架构于 Windows 平台下原生态性能高度优化的系统 2、经过证明适用于众多的商业游戏 3、由 Exit Games 提供迅捷到位的支持 4、服务器端游戏逻辑采用 C#语言实现 5、支持广泛的框架设计,能帮助您处理常见的工作内容 6、简单易扩展的远程方法调用 7、采用 纤程 处理消息机制避免采用 线程导
4、致的问题 8、提供基于 room 游戏的基本应用 Lite,方便原型开发 9、部署简单,支持 云端服务 10、充分利用网络带宽 11、采用小尺寸的二进制协议,可根据需要使用有序可靠的 UDP 12、直接支持常见的客户端平台,提供相同的工作流程 13、封装每个客户端平台的网络层模块 14、通信跨平台 15、使用 hashtable 发送数据,无需担心数据序列化反序列化photon 引擎 - photon 引擎的相关术语Ack 内部使用的命令,主要功能是用于实现可靠 UDP。 Actor 进入房间的玩家叫“Actor”。Actor 在房间内有个编号(ActorNumber),编号仅在当前房间有效。
5、 -来自狗刨学习网ApplicationApplication 指的是游戏逻辑应用,由 C#语言书写同时由 Photon 引擎负责启动运行。所有的应用均从 Application 继承。 Binaries FolderBinariesFolder 指的是针对不同平台编译出的 Photon 目录,以“bin_”为前缀命名目录,且放置在服务端 SDK 的“deploy”目录中。 Build script 即 MsBuild 项目的 批处理文件,实现发布应用时候的 编译程序拷贝文件等功能。请关注 VS 生成菜单下的清理项目选项。 Business logic 即游戏逻辑,运行在 Photon 引擎中
6、,负责处理 operation 和 event。 Channel 在 Photon 引擎中 channel 主要用于分割通信用,在同一 channel 中所有的operation 和 event 都是顺序执行的。 CommandCommands 主要用于在 eNet 协议层上实现数据传输、建立连接关闭连接等功能。当然您无需书写什么命令,在这里提出来,仅仅是为了加深您对 Photon 引擎的理解。 Connect 在 客户端向 photon 引擎发送请求之前在客户端和服务器之间必须要建立连接才行。Custom Operation 任何非客户端 API 内的或新的服务器端的(不在 Lite 应用中
7、)客户端操作。 DashboardDashboard 主要负责收集计数器信息,同时在 web 站点上生成图标以便于监控。Deploy Folder 即发布目录,在服务端 SDK 中,deploy 目录包含了 Photon 引擎运行的所有需要的文件:Photon 核心文件 和应用程序文件。 Device 通常指的是 移动终端 ,或者其他可以运行客户端程序的设备。 Disconnect 即服务器和客户端断开操作。通常发生在客户端断开连接或连接超时时候;服务器也可以根据需要断开和客户端之间的连接。 EventEvent 是异步发送给客户端的事件消息。可以由操作(operations,如 sideef
8、fect)触发或引发(这是 operation 的主要目的)。事件由事件代码(Eventcode)标识,事件来源则是ActorNumber。 EvCode 即 EventCode 简称,标识事件的类型以及事件所附带的信息。 Game 根据上下文,可能是单机的也可能是多个玩家之间有轮次的比赛。Lite 则是后者,玩家可以加入到房间内相互游戏。 Latency 即请求回应时间,服务端和客户端可能有所不同。 Lite 即 Lite 应用,您入门的基本游戏逻辑。 Lobby 大厅,即“Lite 大厅”或“游戏房间”。 Lobby Roomlobby room 是大厅应用的一个特殊的房间。它不关注玩家进
9、出游戏房等操作,而是列出游戏列表供玩家选择。 Log FilesPhoton 作为服务程序运行,没有图形化界面(GUI ),因此需要有日志记录。目前有两套日志:一套是应用的日志,日志文件存于 deploy/log 目录中;另外是 Photon 引擎自身的日志,记录到 deploy/bin_*/log 目录中。 Matchmaking 负责查找游戏建立比赛。Lite 应用无此功能,只能根据名称加入游戏房间。Lite Lobby 则是列出了所有游戏房清单出来便于查找。 NNet 即 eNet RUDP 之前的叫法,主要由 “eNet”和“Neutron” 两个单词混合而来。 Operation 对
10、在 Photon 服务器端上远程方法调用的另外一种叫法。客户端使用 operation 可以在服务器上做任何事情,甚至可以发送 event 给其他客户端。 OpCode“Operation Code”的简称。byte 类型,用于触发服务器端操作,客户端获取操作返回结果,用 opCodes 判断返回动作类型。 Peer 即连接到 Photon 引擎的客户端,另一方面 Photon 服务器端也是 Peer,且只有一个。 Photon Core 指的是 Photon 引擎的核心,由 c+语言实现,负责处理连接以及 eNet 协议。PhotonControlPhoton 的管理工具,打开 Photon
11、Control.exe 文件即可开启一个托盘应用。PhotonServer.configPhoton 引擎的配置文件,主要用于 IP、应用以及性能检测设置。以前叫 PhotonSocketServer.xml,目前刚刚改为 PhotonSocketServer.config。 Policy File 即证书文件,由证书应用负责发送 crossdomain.xml。像 Unity Webplayer、Flash 以及 Silverlight 等 web 游戏平台在连接服务器之前都需要得到授权才可以运行。 Reliable 即可靠命令,要么到达目的地要么超时断开。可靠命令在信道中是顺序传输的,同时
12、若有丢包情况,则会重复发送直到确认成功收到。 ReturnCode 每个 Operation 返回的初步结果,用一个字节的值表示,可以通过ReturnCode 检验操作成功与否:RC_OK = 0 表示操作成功,否则操作失败。 Room 即一组玩家或客户端的集合,可以用于游戏、聊天大厅或者其他方面。Room 是 Lite 框架中的一个类。 RUDP 即可靠 UDP:在 UDP 协议基础上实现的可靠数据传输协议。 Socket Server 即 Photon 引擎的另外一种说法。 Timeout 使用 eNet 方式,客户端和服务器端都监视对方消息是否可靠,如果检测到长时间没有回应,则会断开连接
13、。 Unreliable 不可靠的命令则不需要对方回应,它顺序发送数据,可能会有数据丢失,数据序列有“ 漏洞”。photon 引擎 - photon 引擎 5 分钟快速入门选择最新版本的“ExitGames-Photon-Server-SDK”下载。选择适当版本将 Photon 服务器 SDK 解压到任意位置,进入“deploy”目录选择适合您当前环境的版本: 1.bin_Win32:32 位 Windows Vista 以上版本 2.bin_x64:64 位 Windows Vista 以上版本 3.bin_Win32_xp:32 位 Windows XP 或者 2003 4.bin_Win
14、64_xp:64 位 Windows XP 或者 2003 SDK 的 deploy 目录里面包含了运行 Photon 需要所有文件,其他目录则是文档目录、类库目录以及源码的目录。Photon 控制台(Photon Control)运行 Photon 管理工具:PhotonControl.exe。这是一个托盘应用,程序启动后会创建一个托盘图标。 Photon Control 上的“Run as application”菜单项 点击右下角的托盘图标,单击“Photon”下面的子菜单“Start as Application”即可开启Photon 服务。 启动 Photon 服务大概会花几秒钟时间
15、,这主要取决于配置的应用情况,部署的应用越多启动就会越慢。运行 Testclient 测试客户端服务端的 SDK 提供了一个压力测试工具(TestClient),模拟多个客户端连接,可以点击“Photon”下的“Testclient”菜单开启。 Testclient 是一个命令行工具,可以模拟 25 个游戏每个游戏 4 个玩家共 100 个玩家在线的测试。 Testclient 正常开启的界面 另外,也可以下载.NET 版本的 Photon 客户端 SDK。里面有个“Realtime Demo”可执行程序,配置连接本地服务器,同时打开两个客户端,每个客户端都可以看到另外一端的显示状态变化。第一
16、个例子:unity3d 中使用 photon 服务器引擎一 unity3d 游戏开发Photon 是个好东西,但是网上的入门教程太少了,特别是中文版的。小弟就自己琢磨吧,下面一系列是对 Photon 的研究过程,如有哪个地方写的有误,望请前辈指教。首先去 PhotonServer SDK 下载服务器端 SDK,需要登录的,就先注册一个账号吧.解压出来是四个文件deploy:主要存放 photon 的服务器控制程序和服务端 Demodoc:顾名思义,文档lib:Photon 类库,开发服务端需要引用的src-server:服务端 Demo 源代码今天搞一个客户端连接服务器最简单的程序,也算是 h
17、ello world 吧客户端以 Unity3d 为基础,hello world 包括配置服务器,客户端,客户端连接服务器,客户端状态改变。第一步:配置服务器端打开 deploy 文件夹,看到包含了不同平台编译出的 Photon 目录,以 “bin_”为前缀命名目录,选择你的电脑对应的文件夹打开,看到 PhotonControl.exe,运行后,可以在 windows 右下角看到一个图标,点击图标可以看到 photon 服务器控制菜单,这个以后再做详细介绍 .打开 visual stadio,新建项目,选择 c# 类库,应用程序名字叫做 MyServer.完成后,把我们的 Class1.cs,
18、改名为 MyApplication.cs,作为服务器端主类.然后在当前项目添加引用,链接到刚才提到的 lib 文件夹目录下,添加以下引用:ExitGamesLibs.dll,Photon.SocketServer.dll,PhotonHostRuntimeInterfaces.dll然后新建一个类:MyPeer.cs,写法如下:using System;using System.Collections.Generic;using Photon.SocketServer;using PhotonHostRuntimeInterfaces;namespace MyServerpublic clas
19、s MyPeer : PeerBasepublic MyPeer(IRpcProtocol protocol,IPhotonPeer photonPeer): base(protocol, photonPeer) protected override void OnDisconnect(PhotonHostRuntimeInterfaces.DisconnectReason reasonCode, string reasonDetail)protected override void OnOperationRequest(OperationRequest operationRequest, S
20、endParameters sendParameters)接上,MyApplication.cs 类这样写:using System;using System.Collections.Generic;using System.Linq;using System.Text;using Photon.SocketServer;namespace MyServerpublic class MyApplication : ApplicationBaseprotected override PeerBase CreatePeer(InitRequest initRequest)return new My
21、Peer(initRequest.Protocol, initRequest.PhotonPeer);protected override void Setup()protected override void TearDown()完成后,在解决方案资源管理器中选中当前项目,打开属性,选择生成选项卡,把输出路径改成bin,然后就生成类库吧复制当前项目下 MyServer 文件夹到 deploy 文件夹下,删除除了 bin 文件夹以外其他所有文件和文件夹,然后文本编辑器打开 deploybin_Win64PhotonServer.config 配置文件(我的是 win7 64 位机器,就选择这个
22、),添加以下配置:BaseDirectory:根目录,deploy 文件夹下为基础目录Assembly :是在生成的类库中的 bin 目录下与我们项目名称相同的.dll 文件的名字Type:是主类的全称,在这里是:MyServer.MyApplication,一定要包括命名空间EnableAutoRestart:是否是自动启动,表示当我们替换服务器文件时候,不用停止服务器,替换后 photon 会自动加载文件WatchFiles 和 ExcludeFiles这段代码放在放这里 节点下面完成后保存,运行托盘程序 deploybin_Win64PhotonControl.exe,运行它,如果托盘图
23、标没有变灰,说明服务器运行成功。下面开始编写客户端代码,首先从官网下载 Unity SDK打开 Unity3d 编辑器,首先把 Photon-Unity3D_v3-0-1-14_SDKlibsReleasePhoton3Unity3D.dll 导入到 Unity 中,新建脚本 TestConnection.cs,脚本代码如下:using UnityEngine;using System.Collections;using ExitGames.Client.Photon;public class TestConnection : MonoBehaviour,IPhotonPeerListener
24、 public PhotonPeer peer;/ Use this for initializationvoid Start () peer = new PhotonPeer(this,ConnectionProtocol.Udp);/ Update is called once per framevoid Update () peer.Service();void OnGUI()if(GUI.Button(new Rect(Screen.width/2,Screen.height/2,200,100),Connect)peer.Connect(localhost:5055,MyServer
25、);#region IPhotonPeerListener implementationpublic void DebugReturn (DebugLevel level, string message)public void OnOperationResponse (OperationResponse operationResponse)public void OnStatusChanged (StatusCode statusCode)switch(statusCode)case StatusCode.Connect:Debug.Log(Connect Success!);break;case StatusCode.Disconnect:Debug.Log(Disconnect!);break;public void OnEvent (EventData eventData)#endregion把脚本绑定到场景中物体上,运行后可以看到一个按钮,点击连接,如果连接成功会打印”Connect Success!”.