日志
会自报家门的日志:哪个 behaviour、哪个方法、第几行。上传之后照样能用。
Udon 没有调用栈。一个被塞了字符串的辅助方法,没有任何办法知道是谁调用了它;而世界的日志是所有 behaviour 混在一起的一条流水。Debug.Log("done") 写出来的,是一行谁也追不回源文件的字。
Udonite Logging 把答案钉在调用的地方:
using Udonite.Logging;
public class Scoreboard : UdoniteBehaviour
{
public override void Start()
{
Log.Info("ready");
}
public void Award(int points)
{
Log.Assert(points > 0);
Log.Info("awarding " + points, "scoring");
}
}
[Scoreboard.Start:7] ready
[assertion failed] [Scoreboard.Award:14] points > 0
[scoring] [Scoreboard.Award:16] awarding -3
这不花钱。 [CallerFilePath]、[CallerMemberName]、[CallerLineNumber] 是 C# 编译器在绑定阶段就填好的,等世界跑起来的时候,它们已经是写进程序里的常量。没有查找,没有反射,每帧也不多做任何事。
里面有什么
| 调用 | 写出 |
|---|---|
Log.Info(message) |
普通的一行 |
Log.Warning(message) |
警告 |
Log.Error(message) |
错误 |
Log.Assert(condition) |
只在条件为假时报错,并原样引用那个条件 |
Log.Entry(message) |
不写出,返回一个 LogEntry 对象 |
Log.Site() |
只要 [Type.Member:line] 这一段 |
每一个都可以再带一个标签,不必自己想前缀,就能把相关的行归到一起。
上传之后 Console 依然管用
世界一离开 Editor,Unity 的 Console 就什么都看不见了。之后剩下的记录,只有一个几千行、客户端一直在自言自语的日志文件。
Udonite → Open Window → Settings → Logging 读那个文件,把你的行放回 Console,样子和在 Play 模式里读到的一模一样。所以真有人进来的世界里,你用的还是同一个窗口。
接下来看什么
快速上手:日志 API 的全部,以及一行里每一段的含义。
世界日志:Editor 这一半。怎么从 Console 盯着一个正在跑的世界,以及某个 behaviour 出错自我关闭时你会看到什么。