2017-02-09 53 views
0

我有一個關於Debug.Log如何在Unity中使用SmartFoxServer的問題。我正在寫一個多人遊戲。遊戲將始終有四名球員。由於Unity/Visual Studio的問題,我無法使用Visual Studio調試器(每當我碰到一個斷點時它都會崩潰)。所以,我使用Debug.Log。我的問題是這樣的:當我有四個客戶端運行(一個在Unity中,其他三個來自運行編譯的構建),我有一個Debug.Log代碼運行,它會運行每個實例還是隻運行Unity實例?當我做一個構建時,我只是做一個正常的構建。我沒有選中「開發構建」。當我從服務器獲得響應時,我看到奇怪的行爲。有時,Debug.Log將打印4次,有時只打印一次。我可以調試我的Java擴展,並且只觸發一次斷點。具有Unity日誌記錄的SmartFoxServer問題

下面是一些例子統一C#代碼:

public void OnExtensionResponse(BaseEvent evt) {   
     string cmd = (string)evt.Params["cmd"]; 
     SFSObject dataObject = (SFSObject)evt.Params["params"]; 
     Debug.Log("Got response from server: " + cmd + " " + dataObject.GetUtfString("gameStatus")); 
     switch (cmd) { 


     } 

有時代碼的debug.log,上方被調用一次,有時2倍,或5倍。根據日誌記錄的工作方式,我希望有1次(它只是針對運行的Unity版本進行調試),或者4次(每次運行遊戲的實例都會進行一次)。

感謝

回答

1

,如果你想看到(EXE我假設)的編譯版本的消息的會的debug.log爲每個實例運行,那麼我建議你建一個名爲Debug_UI類,它的唯一目的是將Debug.Log中的所有消息顯示到OnGui方法中。首先用你想記錄的消息調用一個靜態函數,該函數將調用Debug.Log,並將該日誌插入到一個靜態列表中,該靜態列表將用於在OnGui上顯示這些消息。

//靜態公用事業類與DebugMessage功能

public static List<string> logs= new List<string>(); 
public static void DebugMessage (string logType, string message) { 
        logs.Add(message); 
        if (logType.Equals("warning")) 
         Debug.LogWarning(message); 
        else if (logType.Equals("regular")) 
         Debug.Log(message); 
        else if (logType.Equals("error")) 
         Debug.LogError(message); 
       } 

// Debug_UI類

private bool _display; 
private bool _log; 
public Vector2 scrollPosition; 

void OnGUI() 
{ 
    if (GUILayout.Button("Log")) _log = !_log; 

    if (_log) 
    { 
     scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(Screen.width), GUILayout.Height(Screen.height-130)); 

     for(int i= Utilities.logs.Count-1; i >0; i--) 
     { 
      GUILayout.Label(Utilities.logs[i]); 
     } 
     GUILayout.EndScrollView(); 

     if (GUILayout.Button("Clear")) 
      Utilities.logs.Clear(); 

     if (GUILayout.Button("Copy To Clipboard")) 
      GUIUtility.systemCopyBuffer = CopyToClipboard(); 
    } 

} 
private string CopyToClipboard() 
{ 
    string response = null; 
    for (int i = Utilities.logs.Count - 1; i > 0; i--) 
    { 
     response += Utilities.logs[i] + "\n"; 
    } 

    return response; 
} 

//你怎麼會在你的代碼中使用它

public void OnExtensionResponse(BaseEvent evt) {   
     string cmd = (string)evt.Params["cmd"]; 
     SFSObject dataObject = (SFSObject)evt.Params["params"]; 
     Utilities.Text.DebugMessage("normal","Got response from server: " + cmd + " " + dataObject.GetUtfString("gameStatus")); 
     switch (cmd) { 


     } 

和對於多次調用的消息,應檢查是否未實現OnExtensionResponse方法,或者這個類沒有附加到層次結構中的更多對象。