2017-02-09 25 views
0

У меня вопрос о том, как Debug.Log работает в Unity с помощью SmartFoxServer. Я пишу многопользовательскую игру. В игре всегда будет четыре игрока. Из-за проблем с Unity/Visual Studio я не могу использовать Visual Studio Debugger (он разбивает Unity каждый раз, когда я нажимаю точку останова). Итак, я использую Debug.Log.SmartFoxServer с проблемой ведения журнала Unity

Мой вопрос заключается в следующем: когда у меня работает четыре клиента (один из них находится в Unity, остальные три - из скомпилированной сборки), и у меня есть запуск кода Debug.Log, он будет запускаться для каждого экземпляра или просто Случай единства?

FYI, когда я делаю сборку, я просто делаю обычную сборку. У меня нет разработки Build Check. Я вижу странное поведение, когда получаю ответ с сервера. Иногда Debug.Log будет печатать 4 раза, а иногда только один раз. Я могу отлаживать мое расширение Java, и точка останова ударяется только один раз.

Вот несколько примеров Unity 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 раз. В зависимости от того, как работает Logging, я ожидал бы 1 раз (это он только отлаживает для версии Unity) или четыре раза (один раз для каждого экземпляра игры).

благодаря

ответ

1

debug.log будет работать для каждого экземпляра, если вы хотите увидеть сообщения на скомпилированную версию (EXE я предполагаю), то я предлагаю вам создать класс под названием Debug_UI и это единственная цель состоит в том, чтобы отобразить все сообщения из Debug.Log в метод OnGui. Сначала вызовите статическое fuction с сообщением, которое вы хотите записать, и эта функция вызовет 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 метод в других классах или что этот класс не привязан к большему количеству объектов в иерархии.

 Смежные вопросы

  • Нет связанных вопросов^_^