4 using System.Collections.Generic;
17 private TextMesh textMesh;
22 private Queue<string> logMessages =
new Queue<string>();
23 private Queue<string> nextLogMessages =
new Queue<string>();
28 private int maxLogMessages = 30;
34 public delegate
string GetLogLine();
39 private List<GetLogLine> externalLogs =
new List<GetLogLine>();
43 textMesh = GetComponent<TextMesh>();
44 Application.logMessageReceivedThreaded += Application_logMessageReceivedThreaded;
49 string logMessageString = CalculateLogMessageString();
50 textMesh.text = logMessageString;
57 private string CalculateLogMessageString()
59 string logMessageString =
"Per Frame Data:\n------\n";
60 for (
int index = 0; index < externalLogs.Count; index++)
62 string nextExternalLine = externalLogs[index]();
63 if (!
string.IsNullOrEmpty(nextExternalLine))
65 logMessageString +=
string.Format(
"{0}\n", nextExternalLine);
69 logMessageString +=
"------\n";
73 while (logMessages.Count > 0)
75 string nextMessage = logMessages.Dequeue();
76 logMessageString +=
string.Format(
"{0}\n", nextMessage);
78 nextLogMessages.Enqueue(nextMessage);
81 Queue<string> tmp = logMessages;
82 logMessages = nextLogMessages;
83 nextLogMessages = tmp;
84 nextLogMessages.Clear();
87 return logMessageString;
96 private void Application_logMessageReceivedThreaded(
string condition,
string stackTrace, LogType type)
98 LogCallback(condition, stackTrace, type);
101 private void LogCallback(
string message,
string stack, LogType logType)
105 while (logMessages.Count > maxLogMessages)
107 logMessages.Dequeue();
110 logMessages.Enqueue(message);
111 if (logType != LogType.Log)
115 logMessages.Enqueue(stack);
126 externalLogs.Add(callback);
135 if (externalLogs.Contains(callback))
137 externalLogs.Remove(callback);