2016-08-30 19 views
0

決定在價格上通過Unity通過Photon進行聯網(如果有更好的聯網方式讓我知道)我一直在嘗試創建一個簡單的團結媒人,當用戶進入遊戲時,他們首先尋找任何其他匹配(AKA房間/遊戲),如果有一個他們加入它,如果沒有他們創建一個。然而,我很難找到一個關於如何使用團結媒人的明確解釋,所以我可以開發代碼來獲得我期望的行爲,這似乎更加棘手,因爲在最近的更新中,團結正在改變它的網絡系統,所以我相信任何事情之前5.4目前已過期。我發現的唯一有用的東西是this示例代碼,但我想更多地瞭解該系統,因此我不會錯過任何重要概念,這可能是我的初學者 - 很好。尋找關於團結媒人(5.4)以及如何在腳本中使用的基本解釋

因此,我今天要問你的是,你能指導我清楚地解釋與當前統一性相關的配對系統(包括腳本)嗎?或者,無論如何,你可以嘗試去做更困難更費時的事情它自己,它將作爲像我這樣的其他人的未來參考。

感謝您的閱讀,當然任何答案將不勝感激。

我明白我的問題是很難回答,所以我要來測試示例代碼,直到我獲得所需的行爲和:

EDIT [我在C#中工作]發佈任何我無法解決的錯誤。

問題1

  1. 我抄確切的代碼(下面包括更容易引用)到我所附着到我的網絡管理器的腳本。但我得到的錯誤是由於保護級別 -

enter image description here

我對如何解決這一兩個理論 -

  1. 更改方法存取
  2. 沒有獲得來自monobehaviour腳本

我目前正在測試它們,關於如何解決這個問題的任何建議s會非常有用。我想知道我是否應該將這一點報告給團結,對於我來說這似乎是統一文檔中的一個錯誤示例,它說它已更新爲5.4。謝謝。

問題2

我創造了這個腳本,並在連接到同一個網絡管理員的空遊戲物體在編輯器中運行它,我沒有得到任何編譯器錯誤,但是當我運行調試「ERROR:匹配搜索失敗」,這意味着listmatches funtion是不成功的,我的腳本如下 -

using UnityEngine; 
using UnityEngine.Networking; 
using UnityEngine.Networking.Match; 
using UnityEngine.Networking.Types; 
using System.Collections; 
using System.Collections.Generic; 

public class MyMatchMaker : MonoBehaviour { 
    bool done; 
    // Use this for initialization 
    void Start() { 
     NetworkManager.singleton.StartMatchMaker(); 
     NetworkManager.singleton.matchMaker.ListMatches(0, 20, "Match", false, 0, 1, OnMatchList); 
     Debug.Log("Searching"); 
    } 

    public virtual void OnMatchList(bool success, string extendedInfo, List<MatchInfoSnapshot> matchList) 
    { 
     if (success) 
     { 
      if (matchList.Count != 0) 
      { 
       Debug.Log("Matches Found"); 
       NetworkManager.singleton.matchMaker.JoinMatch(matchList[0].networkId, "", "", "", 0, 1, OnMatchJoined); 
      } 
      else 
      { 
       Debug.Log("No Matches Found"); 
       Debug.Log("Creating Match"); 
       NetworkManager.singleton.matchMaker.CreateMatch("Match", 2, true, "", "", "", 0, 1, OnMatchCreate); 
      } 
     } 
     else 
     { 
      Debug.Log("ERROR : Match Search Failure"); 
     } 
    } 

    public virtual void OnMatchJoined(bool success, string extendedInfo, MatchInfo matchInfo) 
    { 
     if (success) 
     { 
      Debug.Log("Match Joined"); 
      MatchInfo hostInfo = matchInfo; 
      NetworkManager.singleton.StartClient(hostInfo); 

      OnConnect(); 
     } 
     else 
     { 
      Debug.Log("ERROR : Match Join Failure"); 
     } 

    } 

    public virtual void OnMatchCreate(bool success, string extendedInfo, MatchInfo matchInfo) 
    { 
     if (success) 
     { 
      Debug.Log("Match Created"); 

      MatchInfo hostInfo = matchInfo; 
      NetworkServer.Listen(hostInfo, 9000); 
      NetworkManager.singleton.StartHost(hostInfo); 

      OnConnect(); 
     } 
     else 
     { 
      Debug.Log("ERROR : Match Create Failure"); 
     } 
    } 

    void OnConnect() 
    { 
     if (Network.isServer) 
     { 
      Debug.Log("You are Server"); 
     } 
     else if (Network.isClient) 
     { 
      Debug.Log("You are Client"); 
     } 
     else 
     { 
      Debug.Log("ERROR : MatchMaking Failed, Peer type is neither Client nor Server"); 
     } 
    } 
} 

謝謝,希望你也能看到我已經錯了。

@Programmer

+0

我使用統一網絡「統一了光子」,「團結紅娘」 @MarcGuiselin –

+0

@MarcGuiselin其實你有這種落後。 Photon取代了Unity的舊網絡系統。 Unity隨後發佈了他們的新網絡系統uNet。它有媒人,並沒有理由使用光子 – Programmer

+0

嗨@Programmer很高興再次見到你。自從我們上次的遭遇以來,我發現uNet端口轉發很困難,所以嘗試了光子,並且開始了一個遊戲的工作,但是在查看價格之後,我轉回到了Unity,但我很努力地瞭解上面的配對。 –

回答

1

啊......得到這個代碼工作,我debuged呼叫信息字符串回來,不得不改變一些項目設置。

using UnityEngine; 
using UnityEngine.Networking; 
using UnityEngine.Networking.Match; 
using UnityEngine.Networking.Types; 
using System.Collections; 
using System.Collections.Generic; 

public class MyMatchMaker : MonoBehaviour { 
    bool done; 
    // Use this for initialization 
    void Start() { 
     NetworkManager.singleton.StartMatchMaker(); 
     NetworkManager.singleton.matchMaker.ListMatches(0, 20, "Match", false, 0, 1, OnMatchList); 
     Debug.Log("Searching"); 
    } 

    public virtual void OnMatchList(bool success, string extendedInfo, List<MatchInfoSnapshot> matchList) 
    { 
     if (success) 
     { 
      if (matchList.Count != 0) 
      { 
       Debug.Log("Matches Found"); 
       NetworkManager.singleton.matchMaker.JoinMatch(matchList[0].networkId, "", "", "", 0, 1, OnMatchJoined); 
      } 
      else 
      { 
       Debug.Log("No Matches Found"); 
       Debug.Log("Creating Match"); 
       NetworkManager.singleton.matchMaker.CreateMatch("Match", 2, true, "", "", "", 0, 1, OnMatchCreate); 
      } 
     } 
     else 
     { 
      Debug.Log("ERROR : Match Search Failure"); 
     } 
    } 

    public virtual void OnMatchJoined(bool success, string extendedInfo, MatchInfo matchInfo) 
    { 
     if (success) 
     { 
      Debug.Log("Match Joined"); 
      MatchInfo hostInfo = matchInfo; 
      NetworkManager.singleton.StartClient(hostInfo); 

      OnConnect(); 
     } 
     else 
     { 
      Debug.Log("ERROR : Match Join Failure"); 
     } 

    } 

    public virtual void OnMatchCreate(bool success, string extendedInfo, MatchInfo matchInfo) 
    { 
     if (success) 
     { 
      Debug.Log("Match Created"); 

      MatchInfo hostInfo = matchInfo; 
      NetworkServer.Listen(hostInfo, 9000); 
      NetworkManager.singleton.StartHost(hostInfo); 

      OnConnect(); 
     } 
     else 
     { 
      Debug.Log("ERROR : Match Create Failure"); 
     } 
    } 
} 
相關問題