如何在 Unity3D 的 c##error 预处理器中打印 URL?

Posted

技术标签:

【中文标题】如何在 Unity3D 的 c##error 预处理器中打印 URL?【英文标题】:How to print an URL in a c# #error preprocessor in Unity3D? 【发布时间】:2018-09-21 12:26:03 【问题描述】:

我正在写一些 Unity 模块。

其中一些相互依赖,所以我想打印一个错误,包括获取缺失模块的 URL。

我试过这个:

#if !THIS_MODULE
#define THIS_MODULE
#endif

#if !REQUIRED_MODULE
#error This Module requires the RequiredModule module
#error Please get it from "https://example.com"
#endif

如果缺少所需的模块,第一行将按预期在 Unity3D 控制台中打印出来

error CS1029: #error: 'This Module requires the RequiredModule module'

但第二行只打印

error CS1029: #error: 'Please get it from "https:'

我在有和没有"' 的情况下都试过了

除了将"' 添加到输出中之外,这不会改变任何内容

我试过了

#error Please get it from "https:\/\/example.com" 

但比它打印出来

#error: 'Please get it from "https:\/\/example.com"'

如何在 Unity 中使用 #error 预处理器正确打印 URL?

我是否缺少任何转义规则?

【问题讨论】:

【参考方案1】:

您根本不需要任何转义。 (Online demo.)

#error/#warning 指令的消息(基本上)是指令之后和行尾之前的任何内容。 这种行为也是documented in the compiler source。

【讨论】:

然而..正如我在问题中所说的那样,它不起作用。 Unity 本身是否有可能在那里逃脱了某些东西? 可能是。我对 Unity 编译器不是很熟悉。但我不知道他们为什么要更改所有地方的错误指令解析器。 嗯,如果使用 Debug.Log(string),我可以在 Unity 控制台中将其打印出来,但它会在预处理器中将其切断 嗯,Unity 可能是故意这样做的,以防止有人在预编译的.dlls 中放置垃圾邮件或恶意 URL。没有机会避免在编辑器中显示它们,所以也许他们决定根本不允许显示 url。无论如何感谢您的帮助!我可以在 VisualStudio 中看到正确显示的错误,因此它必须与 Unity 有关。

以上是关于如何在 Unity3D 的 c##error 预处理器中打印 URL?的主要内容,如果未能解决你的问题,请参考以下文章

C语言预处理命令总结大全

csharp Unity3D预处理器指令

unity3d shader 预定义着色器预处理宏

c语言预处理

如何在统一的每个按键上重复动画(Unity3d,C#)

C预处理和C库