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在講解.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM