从源代码访问Unity3D的自定义全局定义

时间:2018-09-22 11:38:38

标签: c# unity3d unityscript

有什么方法可以在Unity中检查是否使用自定义全局定义导入了Google Mobile Games?

我找不到有关“自定义全局定义”工作方式的解释。

我希望它是这样的:

#if Admob
//Complete code here (Disabled when Google Play Games isn't imported
#endif

还是有另一个可以做到这一点?

1 个答案:

答案 0 :(得分:2)

根据Unity's Documentation

  

可以通过提供自己的方法添加到#define指令的内置选择中。打开“播放器设置”的“其他设置”面板,然后导航到“脚本定义符号”文本框。

如果未在此处定义,则应手动添加自定义定义,并使用;将其与其他定义分开。然后,您应该可以像问题中指出的那样使用自定义定义。

您可能还想通过以下代码向Unity3D的编辑器添加额外的功能来自动执行自定义定义的设置和取消设置。这将在Unity的编辑器中创建一个菜单项,以便于访问。当您需要经常更改特定的自定义定义时,这非常有用。

此代码的想法并不属于我,它的来源来自this link

例如对于自定义定义“ GOOGLE_MOBILE_GAMES”,您应该编写以下内容:

public class ToggleDefineSymbol : Editor
{
    [MenuItem("Tools/Set GOOGLE_MOBILE_GAMES")]
    public static void Set_GOOGLE_MOBILE_GAMES()
    {
        string symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(
            BuildTargetGroup.Standalone);

        if (!symbols.Contains("GOOGLE_MOBILE_GAMES"))
        {
            PlayerSettings.SetScriptingDefineSymbolsForGroup(
                BuildTargetGroup.Standalone, symbols + ";GOOGLE_MOBILE_GAMES");
        }
    }

    [MenuItem("Tools/Unset GOOGLE_MOBILE_GAMES")]
    public static void Unset_GOOGLE_MOBILE_GAMES()
    {
        string symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(
            BuildTargetGroup.Standalone);

        if (symbols.Contains("GOOGLE_MOBILE_GAMES"))
        {
            symbols = symbols.Replace(";GOOGLE_MOBILE_GAMES", "");
            PlayerSettings.SetScriptingDefineSymbolsForGroup(
                BuildTargetGroup.Standalone, symbols);
        }
    }
}

将此脚本放在Editor文件夹中名为Assets的文件夹中。

您可能还想根据需要更改BuildTargetGroup参数。如果您需要此名称来进行进一步的自定义定义,只需复制上面的功能,然后用所需的任何自定义定义替换“ GOOGLE_MOBILE_GAMES”。