【问题标题】:How can I set #define right after change define in script?如何在脚本中更改定义后立即设置#define?
【发布时间】:2023-03-22 17:18:01
【问题描述】:

我下面有一个测试代码。

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

    PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, 
    _strDefine);

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

    yield break;
}

结果是如果之前没有定义Define 'test',log ???不显示。

我想在设置定义后立即设置“测试”。

我该怎么办?

【问题讨论】:

    标签: c# unity3d build


    【解决方案1】:

    这不可能像你想象的那样。

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

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

    →在重新编译之前,您将永远不会看到ScriptingDefineSymbols 更改后的效果

    【讨论】:

      【解决方案2】:

      在 DER HUGO 评论后编辑
      您可以使用 PlayerSettings.SetScriptingDefineSymbolsForGroup

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

      但是你需要重新编译代码(如前面 derHugo 回答中所述),所以它不会在第一次运行时工作。

      无论如何,如果您尝试这样做,您将使用定义符号来表示非预期的东西。您应该为您的逻辑使用布尔值。


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

      还要考虑在编辑器中更改它们会自动编译脚本(除非您明确告诉编辑器不要这样做)

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

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

      【讨论】:

      • 刚刚更新了答案以通过脚本更改它们。
      • 这并不能真正解决问题。 OP 已经在使用它了。问题在于代码必须在更改全局定义后重新编译才能执行包装的代码块。
      • 是的,你是对的。删除了答案的错误部分。
      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      相关资源
      最近更新 更多