如何在脚本中的更改定义后立即设置#define?

时间:2019-06-07 08:53:28

标签: c# unity3d build

我下面有一个测试代码。

IEnumerator Temp2()
{
    string _strDefine = "test";

    PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, 
    _strDefine);

    #if test
    Debug.Log("???");
    #endif

    yield break;
}

结果是,如果之前未定义Define'test',则记录???不显示。

我希望在定义define之后立即设置“测试”。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

这是您无法想到的方式。

更改ScriptingDefineSymbols后,必须由Unity重新编译代码。

因此,在重新编译之前,您将永远不会看到包装在#if test预处理器中的代码块。

→重新编译之前,ScriptingDefineSymbols 之后的更改将永远不会带来影响。

答案 1 :(得分:1)

在雨果评论后编辑
您可以使用PlayerSettings.SetScriptingDefineSymbolsForGroup

通过脚本更改定义符号
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, "test");

但是随后您需要重新编译代码(如之前在derHugo答案中所述),因此它在第一次运行时将无法工作。

无论如何,如果您尝试执行此操作,则将定义符号用于不需要的内容。您应该使用布尔值作为逻辑。


如果您仍想更改定义设置,则可以在编辑器中进行。

还请考虑在编辑器中对其进行更改将自动编译脚本(除非您明确告知编辑器不要这样做)

编辑->项目设置->播放器设置。

从那里,您将test添加到脚本定义符号中。

enter image description here