[英]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.