许久没写了,今日闲来无事随性一些,总结一下最近的游戏经历(写游戏)

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自带这个命令的所以不需要。

现在让我们来看看服务器端的代码,我们的继承就要变了

  1. public class MyApplication : LiteApplication //Application类的继承改变
  2.  
  3. 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都已经帮我们实现了,非常方便。

现在就说说在客户端中的写法:

  1. using UnityEngine;
  2. using ExitGames.Client.Photon.Lite;
  3. using ExitGames.Client.Photon;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6.  
  7. public class Test : MonoBehaviour, IPhotonPeerListener
  8. {
  9.  
  10. LitePeer peer;
  11.  
  12. public void RadioRoomEvent(byte eventCode, Hashtable customEventContent)
  13. {
  14. peer.OpRaiseEvent(eventCode, customEventContent, true); // 给目前在服务器中的所有玩家发送事件
  15. }
  16.  
  17. public void JoinRoom(string RoomName)
  18. {
  19. peer.OpJoin(RoomName); // 发送加入房间的消息
  20. }
  21.  
  22. public void LeaveRoom()
  23. {
  24. peer.OpLeave(); // 发送离开房间的消息
  25. }
  26.  
  27. public void SendMessage(byte customOpCode, Dictionary<byte, object> customOpParameters)
  28. {
  29. peer.OpCustom(customOpCode, customOpParameters, true); // 给服务器发送消息
    }
  30.  
  31. public void DebugReturn(DebugLevel level, string message)
  32. {
  33. Debug.Log(message);
  34. }
  35.  
  36. public void OnEvent(EventData eventData)
  37. {
  38. //处理服务器转发回来的事件
  39.  
  40. }
  41.  
  42. public void OnOperationResponse(OperationResponse operationResponse)
  43. {
  44. //处理服务器发回来的消息
  45.  
  46. }
  47.  
  48. public void OnStatusChanged(StatusCode statusCode)
  49. {
  50. switch (statusCode)
  51. {
  52. case StatusCode.Connect:
  53. Debug.Log("Connect");
  54. break;
  55. case StatusCode.Disconnect:
  56. Debug.Log("Disconnect");
  57. break;
  58. }
  59. }
  60.  
  61. // Use this for initialization
  62. void Start () {
  63. peer = new LitePeer(this, ConnectionProtocol.Udp);
  64. peer.Connect("localhost:5055", "MyServer");
  65. }
  66.  
  67. // Update is called once per frame
  68. void Update () {
  69. peer.Service();
  70. }
  71. }

几点注意的:

包名 using ExitGames.Client.Photon.Lite;

发送加入房间 peer.OpJoin(RoomName); // 非常的方便

同样离开也非常方便

而怎么处理由Lite向客户端发送的事件呢~ 下P在讲解.

Photon服务器进阶&一个新游戏的出产(一)的更多相关文章

  1. Photon服务器进阶&一个新游戏的出产(三)

    下面或许该介绍介绍我用Photon写的一个4人联机麻将了~ 上图

  2. Photon服务器进阶&一个新游戏的出产(二)

    继续上个文章说~ 接收其他人发过来的广播,在OnEvent中进行响应 比如说接收过来加入的消息 public void OnEvent(EventData eventData) { Debug.Log ...

  3. unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计

    unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计 最近做玩票性质的游戏项目,客户端技术是 unity3d 和 android. ...

  4. 本人第一个android游戏《新连连看》上架

    经过艰苦奋战了几天,本人的第一个android游戏<新连连看>最终完毕了第一个版本号,比較简陋.另一部分功能保留没有开放.等第二个版本号再上.用的libgdx框架.可能不是非常出名,可是本 ...

  5. [Xcode 实际操作]九、实用进阶-(28)在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP

    目录:[Swift]Xcode实际操作 本文将演示如何在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP. 首先要做的是打开浏览器,并进入[iTunesConnect网站], ...

  6. 微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)

    网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP. 摘录网上的“.NET 15周年”信息如下: 微软的 .NET 框架本周迎来了 15 岁生日..NET 的第一个版 ...

  7. 使用Phaser开发你的第一个H5游戏(一)

    本文来自网易云社区 作者:王鸽 不知你是否还记得当年风靡一时的2048这个游戏,一个简单而又不简单的游戏,总会让你在空闲时间玩上一会儿. 在这篇文章里,我们将使用开源的H5框架--Phaser来重现这 ...

  8. Unity3d客户端与Photon服务器数据通信

    今天先介绍一下Photon服务器是什么,可以做什么,为什么要使用它? Photon:开发多人联网游戏最轻松的方案!可以迅速简单实现多人实时在线网络游戏(pvp). Photon:透过位于各地的Phot ...

  9. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

随机推荐

  1. JVM-加载,链接,初始化

    Java Virtual Machine 动态的加载,链接和初始化类和接口.那么,Class 二进制文件是怎样被 JVM 加载到内存中的?JVM 如何描述一个 Java 类?类或接口怎么才能让 JVM ...

  2. (转载)SQL Reporting Services (Expression Examples)

    https://msdn.microsoft.com/en-us/library/ms157328(v=SQL.100).aspx Expressions are used frequently in ...

  3. Solr嵌套子文档的弊端以及一种替代方式

    背景:在考察了多种工具后,我们决定使用solr来作为多标签用户管理体系的查询方案. 原计划:电话,call客,跟进等等记录上报到kafka,然后通过flume+morphline录入到solr中.每一 ...

  4. 《java JDK7 学习笔记》之接口与多态

    1.对于"定义行为"也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的. 类要操作接口,必须使用imp ...

  5. mysql内置函数大全

    mysql 字符串函数用法集合 ASCII(str)返回字符串str的最左面字符的ASCII代码值. mysql> select ascii('d'); +------------+ | asc ...

  6. vs.net Web.csproj.webinfo文件

    使用VS工具打开工程的时候,请直接打开BookShop.sln文件, 请修改WEB/Web.csproj.webinfo文件中的<Web URLPath = "http://local ...

  7. Swift实现封装PopMenu菜单,可在屏幕任意位置弹出

    效果图: 说明: 代码现已支持 Swift3 语法 使用介绍: 1.初始化位置 //frame 为整个popview相对整个屏幕的位置 箭头距离右边位置,默认15 //popMenu = SwiftP ...

  8. x01.os.19: linux 0.0

    linux 0.0 是一个丢失的版本,但赵炯老师又在 linux 0.11 的基础上,使它起死回生.www.oldlinux.org 有大量资源可供下载,值得一看. 1.要编译运行,首先需安装:sud ...

  9. android 尽量不要使用static静态变量

    使用静态static静态变量潜在性问题: 1.占用内存,并且内存一般不会释放: 2.在系统不够内存情况下会自动回收静态内存,这样就会引起访问全局静态错误. 3.不能将activity作为static静 ...

  10. 从一个url输入浏览器到页面渲染出来,这个过程都发生了哪些事情?

    经典问题:在浏览器输入一个url后,会发生什么事情呢? (1)假设是简单的http请求(GET),IPV4,无代理. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,若缓存中有,请略过中间步骤,直接跳到 ...