zoukankan      html  css  js  c++  java
  • 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在讲解.

  • 相关阅读:
    链表(一):链表简介
    PLSQL_性能优化系列14_Oracle High Water Level高水位分析
    PLSQL_性能优化系列13_Oracle Index Rebuild索引重建
    PLSQL_性能优化系列12_Oracle Index Anaylsis索引分析
    PLSQL_性能优化系列11_Oracle Bulk Collect批处理
    PLSQL_性能优化系列10_Oracle Array数据组优化
    PLSQL_性能优化系列09_Oracle Partition Table数据分区表
    PLSQL_性能优化系列08_Oracle Insert / Direct Insert性能优化
    PLSQL_性能优化系列07_Oracle Parse Bind Variables解析绑定变量
    PLSQL_批量压缩表Table Compress(案例)
  • 原文地址:https://www.cnblogs.com/SHOR/p/5392004.html
Copyright © 2011-2022 走看看