2017-02-09 36 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方法,或者这个类没有附加到层次结构中的更多对象。