日志

会自报家门的日志:哪个 behaviour、哪个方法、第几行。上传之后照样能用。

更新于 2026-09-08

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 出错自我关闭时你会看到什么。

出了点问题 重新加载