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

标签 c# unity-game-engine

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

我找不到有关自定义全局定义如何工作的解释。

我希望它是这样的:

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

或者还有其他人可以做到这一点吗?

最佳答案

根据Unity's Documentation :

It is possible to add to the built-in selection of #define directives by supplying your own. Open the Other Settings panel of the Player Settings and navigate to the Scripting Define Symbols text box.

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

您可能还想通过以下代码向 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);
        }
    }
}

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

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

关于c# - 从源代码访问 Unity3D 的自定义全局定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52456329/

相关文章:

math - 给定所有 4 个顶点位置,求不规则四面体的高度

unity-game-engine - Unity 中的游戏对象更新顺序

c# - 如果返回的行为 NULL,则将 List<T> 项设置为空

c# - 如何使用 Dapper 批量插入外键?

unity-game-engine - 如何在着色器中定义自定义预处理器宏?

unity-game-engine - 当 Unity 没有输入焦点时捕获 Unity 中的按键

python - 如何在 cozmo 机器人和 Hololens 之间建立 WebSocket 连接?

c# - WPF/C#/MVVM : Need Some Help Implementing Custom View Options for User Control

c# - 更改用于 XML 序列化的 XmlElement 名称

c# - 如何从子类访问父类中的方法