簡體   English   中英

SmartFoxServer出現Unity記錄問題

[英]SmartFoxServer with Unity Logging issue

我有一個關於Debug.Log如何在Unity中與SmartFoxServer一起工作的問題。 我正在寫一個多人游戲。 游戲將始終有四個玩家。 由於Unity / Visual Studio的問題,我無法使用Visual Studio調試器(每次遇到斷點時,它都會使Unity崩潰)。 因此,我使用Debug.Log。

我的問題是:當我有四個客戶端在運行(一個在Unity中,另外三個在運行已編譯的版本)並且我運行了Debug.Log代碼時,它將在每個實例還是在Unity實例上運行?

僅供參考,當我進行構建時,我只是進行常規構建。 我沒有檢查開發版本。 從服務器返回響應時,我看到奇怪的行為。 有時,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次。 根據日志記錄的工作方式,我希望使用1次(僅針對運行Unity版本的調試)或4次(對於運行的每個游戲實例一次)。

謝謝

Debug.Log將為每個實例運行,如果您想查看編譯版本上的消息(我假設是exe),那么我建議您構建一個名為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方法,或者該類未附加到層次結構中的更多對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM