有没有办法在Unity的控制台中使用超链接?

Pra*_*tic 7 c# unity-game-engine

我正在使用 Unity 的自定义记录器(log4net),遵循指南。这涉及到创建一个自定义附加程序,使用以下命令写入 Unity 的控制台Debug.Log(). 所有这些都很好用,但问题是,每当打印日志语句时,它都来自自定义附加程序。因此,当我双击控制台中的消息时,我最终会打开附加程序的代码,而不是消息来源的源代码。我想在控制台中打印一个可点击的超链接到源代码的路径。(我已经有了路径)

看来 Unity 控制台已经支持可点击的链接: 在此输入图像描述 我只是不知道如何让它打印我想要的链接。

在 Intellij 等 IDE 中,控制台会自动解析链接,因此我尝试在 Unity 控制台中打印源的路径,例如:

(at Assets/Scripts/MovablePlatform.cs:)

但这没有用

长话短说

我想知道是否可以在 Unity 控制台中打印可点击的链接,例如“ http://www.google.com ”或“file:///D:/Mysourcode/main.cs”

Sør*_*org 7

自 Unity 2019 以来,记录链接就像<a href="Assets/A.cs" line="2">asset</a>创建资产链接一样。这与 Unity 内部用于可单击堆栈跟踪的机制相同(也在该版本中引入)。该路径必须引用现有的 Unity 资源(而不仅仅是任何文件)。

但请注意,虽然该链接在调试日志消息的主列表中呈现为蓝色,但它在那里不可单击,只能在下面的详细窗格中(也显示堆栈跟踪)。也就是说,您必须首先单击日志消息,然后单击详细消息窗格中的链接。

(最后,在我的测试中,我偶尔会遇到可能是 Unity 错误或 Rider IDE 集成中的错误,有时我必须按 Alt+Tab 离开 Unity 并返回,然后才能打开任何资源链接(包括堆栈跟踪链接)。我认为这样做会重置 Unity 资产数据库中的某种状态,这就是它修复问题的原因。)

自Unity 2021.2.0a11开始,同时支持Web链接和文件链接:

Debug.Log("Click me: <a href=\"Assets/A.cs\" line=\"2\">local file</a>");
Debug.Log("Click me: <a href=\"https://example.org\">website</a>");
Run Code Online (Sandbox Code Playgroud)

现在,您甚至可以挂钩超链接处理,并使用EditorGUI.hyperLinkClicked对结果执行任何您喜欢的操作。

UnityEditor.EditorGUI.hyperLinkClicked += (window, args)
    => Debug.Log($"clicked link to {args.hyperLinkData["href"]} in {window}");
Run Code Online (Sandbox Code Playgroud)

因此您甚至可以实现自己的临时链接(通过使用除 之外的其他属性href,以避免冲突)。


Dal*_*ale 5

富文本支持文件路径的锚标记,但似乎不支持 URL。你的例子是:

Debug.Log("<a href=\"Assets/Scripts/MovablePlatform.cs\" line=\"7\">Assets/Scripts/MovablePlatform.cs:7</a>");
Run Code Online (Sandbox Code Playgroud)


Dra*_*18s -1

据我所知,没有。

这些链接在那里,以便您可以跳转到导致 Debug.Log 调用的堆栈跟踪中的任何调用方法,您所要做的就是向下滚动。Unity 添加此功能正是因为日志附加程序,但系统完全由 Unity 管理。双击仍然会转到实际的 Debug.Log 行,但您仍然可以通过这些“超链接”访问其他行,但它们是由 Unity 自动构建的,并且没有用于自己编写这些链接的 API。

如果您不希望日志附加程序丢失该信息,请不要在使用日志附加程序时执行任何导致 Unity 丢失该信息的操作。您没有包含代码,因此尚不清楚为什么会丢失额外的信息。另请检查您的控制台设置以及您使用的是 Unity 2019.1 或更高版本。