Да, вы можете просто добавить обратный вызов, например, Application.logMessageReceivedThreaded
Пример из API, расширенный сценарием OnGUI
из этой темы
// Put this on any GameObject in the scene
public class ExampleClass : MonoBehaviour
{
// Adjust via the Inspector
public int maxLines = 8;
private Queue<string> queue = new Queue<string>();
private string currentText = "";
void OnEnable()
{
Application.logMessageReceivedThreaded += HandleLog;
}
void OnDisable()
{
Application.logMessageReceivedThreaded -= HandleLog;
}
void HandleLog(string logString, string stackTrace, LogType type)
{
// Delete oldest message
if (queue.Count >= maxLines) queue.Dequeue();
queue.Enqueue(logString);
var builder = new StringBuilder();
foreach (string st in queue)
{
builder.Append(st).Append("\n");
}
currentText = builder.ToString();
}
void OnGUI()
{
GUI.Label(
new Rect(
5, // x, left offset
Screen.height - 150, // y, bottom offset
300f, // width
150f // height
),
currentText, // the display text
GUI.skin.textArea // use a multi-line text area
);
}
}
В целом: OnGUI
является наследством, и вы действительно должны использовать это только для отладки.
Но вы можете использовать тот же сценарий, например, для UI.Text
компонента и вместо использования OnGUI
назначьте ему текст.
Сценарий в основном будет выглядеть так же, но будет иметь
public Text text;
и вместо OnGUI
будет непосредственно делать
text.text = builder.ToString();