如何刷新/重新编译自定义预处理器

时间:2018-04-23 03:08:03

标签: unity3d preprocessor

我的PlayerSettings中有一个自定义预处理器添加到统一。根据统一文档Unity Custom Define Link,您基本上只需在

中添加预处理器
  

播放器设置 - >其他设置 - >脚本定义符号

并在脚本 #if预处理器中使用该预处理器。 我的问题是当我添加它时,VS编辑器不会更改代码以编译启用的代码并导致不符合代码。添加预处理器后,我还需要在脚本中添加其他内容吗?我尝试添加AssetDatabase.Refresh();但它没有用。是否需要在记忆中刷新某些东西?我确实重新开始团结,但没有帮助。

更新:现在我使用以下脚本在运行时添加预处理器

/// <summary>
/// Symbols that will be added to the editor
/// </summary>
public static readonly string[] Symbols = new string[] {
    "MYPreprocessor1"
};

/// <summary>
/// Add define symbols as soon as Unity gets done compiling.
/// </summary>
static void AddDefineSymbols()
{
    string definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
    List<string> allDefines = definesString.Split(';').ToList();
    allDefines.AddRange(Symbols.Except(allDefines));
    PlayerSettings.SetScriptingDefineSymbolsForGroup(
        EditorUserBuildSettings.selectedBuildTargetGroup,
        string.Join(";", allDefines.ToArray()));
}

通过脚本添加的预处理程序块有效,但我必须清除&#34; 脚本定义符号&#34;值和重新启动统一允许预处理程序块代码进行编译。但是当你直接添加它时它不会起作用

注意:上面的代码通过脚本将预处理器块添加到脚本定义符号中。如果预处理器块已经存在,它将不执行任何其他操作,只需添加它。

3 个答案:

答案 0 :(得分:0)

AssetDatabase.RefreshAssetDatabase.SaveAssets应该在没有任何手动步骤的情况下完成工作,至少对于JetBrains Rider而言。 检查您的首选项是否已启用编辑器附加。

答案 1 :(得分:0)

好的,这是Visual Studio 2017的问题。如果您只是重新加载解决方案,预处理器将无法工作。每当检测到预处理器语句的更改时,VS将提供四个选项Reload,Reload solution,Ignore和Ignore All。我总是使用重载解决方案在更改后重新加载所有数据,但是为了预处理器激活/刷新VS中的第一个选项,即必须按下重新加载按钮。因此,您不需要添加上述任何其他脚本。我已经测试了单声道,单声道似乎自动完成上述工作。这就是VS2017社区的情况。希望这有助于某人。

答案 2 :(得分:0)

正如ARMatt所说的,AssetDatabase.Refresh或AssetDatabase.SaveAssets,但是在我的情况下,我需要两者(首先保存资源,但不确定是否重要)。一个或另一个似乎不保留我试图存储在可编写脚本的对象中的构建信息。