Photon服务器进阶&一个新游戏的出产(一)
许久没写了,今日闲来无事随性一些,总结一下最近的游戏经历(写游戏)
Photon服务器的进阶~
距离上一篇估计也过去一个多月了,对于Photon真是又爱又恨。
爱着它的书写方便。
恨着它的教程稀少总走弯路,但最后都不知道爱不爱着了。
作为服务器的进阶就得讲点高逼格的东西啦。
老套路给教程。我的经验都是对别的教程的理解或者是升华,想自己升华的果断点完教程然后右上角吧。
http://search.jikexueyuan.com/course/?q=Photon //极客学院对于Photon的讲解,比较清晰明了
还有我上篇文章发的链接
http://www.cnblogs.com/liusuqi/category/447143.html //貌似都是对官方Demo的翻译,现在去官方看有的已经没有了,所有很有借鉴价值
把这俩个结合在一起看会有奇效哦~ (大概O_O)
说了这么长时间废话,恩。。进入正题!
我把Photon的进阶分为两个部分:
1. Lite的使用
2.Peer的使用
让我们来说说这个第一点吧,其实挺坑的,教程里这个说一个Lite的使用啊,又一个Room的。最开始都不知道怎么用这些东西,其实这个就是官方写的一个Lite Demo 在deploy下的Lite/bin 里有个Lite.dll 这个就是教程中常说的Lite拉,找到这个可真费劲啊~
这个dll只需要导入服务端就可以,Unity3d的dll自带这个命令的所以不需要。
现在让我们来看看服务器端的代码,我们的继承就要变了
public class MyApplication : LiteApplication //Application类的继承改变 public class MyPeer : LitePeer //Peer类的继承改变
这样我们才能使用Lite里的功能,其实Lite就是对原先的PeerBase和Application进行了封装,加入了Room,方便了广播数据和房间分配
关于Lite的概念这里讲解了 http://www.cnblogs.com/liusuqi/archive/2013/05/15/3079713.html
有几个比较重要的操作:
Join 加入: 输入任何房间的名字,如果它不存在的话它将被创建,加入时将隐式地离开先前的房间(如果有的话),返回指定的ActorNumber。
Leave 离开: 离开房间(但保持连接)。
RaiseEvent 触发事件: 告诉房间发送一个事件到其他Peer。事件有一个EventCode,可以携带客户端提供的数据。Lite并不存储事件。
GetProperties 获取属性: 在Lite中,属性可以被附加到房间和玩家上,伴随着这个操作,他们都将被获取。
SetProperties 设置属性: 高度的任意的键-值对,一个房间或一个单一的玩家,Lite不使用数据,所以客户端可以发送任意的数据,代码按照惯例。
这里面还提到了一个比较重要的概念Room(房间),举几个例子:
比如说游戏中有的组队系统,你发言的时候只能组队的人看见而别人看不见,这就是房间的作用。
说了这么多,那这几个操作和方法怎么使用呢? 或许你会说那个博客里不有例子么,但是其实并不是一回事。
我们说的这几个操作多在客户端中使用,而服务器就是个转接的,该实现的方法Lite.dll都已经帮我们实现了,非常方便。
现在就说说在客户端中的写法:
using UnityEngine;
using ExitGames.Client.Photon.Lite;
using ExitGames.Client.Photon;
using System.Collections;
using System.Collections.Generic; public class Test : MonoBehaviour, IPhotonPeerListener
{ LitePeer peer; public void RadioRoomEvent(byte eventCode, Hashtable customEventContent)
{
peer.OpRaiseEvent(eventCode, customEventContent, true); // 给目前在服务器中的所有玩家发送事件
} public void JoinRoom(string RoomName)
{
peer.OpJoin(RoomName); // 发送加入房间的消息
} public void LeaveRoom()
{
peer.OpLeave(); // 发送离开房间的消息
} public void SendMessage(byte customOpCode, Dictionary<byte, object> customOpParameters)
{
peer.OpCustom(customOpCode, customOpParameters, true); // 给服务器发送消息
} public void DebugReturn(DebugLevel level, string message)
{
Debug.Log(message);
} public void OnEvent(EventData eventData)
{
//处理服务器转发回来的事件 } public void OnOperationResponse(OperationResponse operationResponse)
{
//处理服务器发回来的消息 } public void OnStatusChanged(StatusCode statusCode)
{
switch (statusCode)
{
case StatusCode.Connect:
Debug.Log("Connect");
break;
case StatusCode.Disconnect:
Debug.Log("Disconnect");
break;
}
} // Use this for initialization
void Start () {
peer = new LitePeer(this, ConnectionProtocol.Udp);
peer.Connect("localhost:5055", "MyServer");
} // Update is called once per frame
void Update () {
peer.Service();
}
}
几点注意的:
包名 using ExitGames.Client.Photon.Lite;
发送加入房间 peer.OpJoin(RoomName); // 非常的方便
同样离开也非常方便
而怎么处理由Lite向客户端发送的事件呢~ 下P在讲解.
Photon服务器进阶&一个新游戏的出产(一)的更多相关文章
- Photon服务器进阶&一个新游戏的出产(三)
下面或许该介绍介绍我用Photon写的一个4人联机麻将了~ 上图
- Photon服务器进阶&一个新游戏的出产(二)
继续上个文章说~ 接收其他人发过来的广播,在OnEvent中进行响应 比如说接收过来加入的消息 public void OnEvent(EventData eventData) { Debug.Log ...
- unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计
unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计 最近做玩票性质的游戏项目,客户端技术是 unity3d 和 android. ...
- 本人第一个android游戏《新连连看》上架
经过艰苦奋战了几天,本人的第一个android游戏<新连连看>最终完毕了第一个版本号,比較简陋.另一部分功能保留没有开放.等第二个版本号再上.用的libgdx框架.可能不是非常出名,可是本 ...
- [Xcode 实际操作]九、实用进阶-(28)在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP
目录:[Swift]Xcode实际操作 本文将演示如何在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP. 首先要做的是打开浏览器,并进入[iTunesConnect网站], ...
- 微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)
网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP. 摘录网上的“.NET 15周年”信息如下: 微软的 .NET 框架本周迎来了 15 岁生日..NET 的第一个版 ...
- 使用Phaser开发你的第一个H5游戏(一)
本文来自网易云社区 作者:王鸽 不知你是否还记得当年风靡一时的2048这个游戏,一个简单而又不简单的游戏,总会让你在空闲时间玩上一会儿. 在这篇文章里,我们将使用开源的H5框架--Phaser来重现这 ...
- Unity3d客户端与Photon服务器数据通信
今天先介绍一下Photon服务器是什么,可以做什么,为什么要使用它? Photon:开发多人联网游戏最轻松的方案!可以迅速简单实现多人实时在线网络游戏(pvp). Photon:透过位于各地的Phot ...
- Step by Step 创建一个新的Dynamics CRM Organization
原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...
随机推荐
- Android 面试题及答案(2)
1.Activity相关.launchmode,OnSaveInstnceState,生命周期等. 4种默认的launchmode,以及OnNewIntent的回调. OnNewIntent-> ...
- ant+findbugs 扫描代码生成报告
1. 下载安装ant.findbugs 下载ant.findbugs最新压缩包解压到本地磁盘合适位置,比如: D:\Program Files\apache-ant-1.9.7 D:\Program ...
- PL/SQL Developer连接本地Oracle 11g 64位数据库
转摘:http://www.cnblogs.com/ymj126/p/3712727.html 用于学习,笔记,以备后用. 1.登录PL/SQL Developer 这里省略Oracle数据库和PL/ ...
- ADO.NET五大对象理论和实践(草稿)
一.ADO.NET五大对象理论 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. Command对象在执行的的时候有几个比较重要的方法,如Exe ...
- jQuery标签选择器
$(function() { //alert("hello jquery"); //选择器 //id选择器 $("#bt1").click( function( ...
- mysql权限与安全
一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...
- java实现串口通讯
一. 准备工作 1. 点击此下载java串口通讯相关工具 2. 将RXTXcomm.jar放到 %JAVA_HOME%\jre\lib\ext\ 目录下,工程中引入该jar包 3. 将rxtxSe ...
- redis、memcache、mongoDB 做了对比
from: http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对redis.memcache.mongoDB 做了对比. 1.性能 都比较 ...
- Java连接SQLServer2008终极解决办法(亲身上机演练版)
今天我一学妹问我,Java连接SQLServer2008数据库的问题,一直无法连接成功.想起自己刚开始学习的时候,在网上找各种文章,然后实际上机验证操作,花了一两天时间才搞定,一把辛酸泪呀!记得当时是 ...
- jmeter(五)Sample之JDBC Request
jmeter中取样器(Sampler)是与服务器进行交互的单元.一个取样器通常进行三部分的工作:向服务器发送请求,记录服务器的响应数据和记录相应时间信息 有时候工作中我们需要对数据库发起请求或者对数据 ...