Unity3d 在播放模式下忽略所有调试断言

Unity3d 在播放模式下忽略所有调试断言,unity3d,Unity3d,我有很多先决条件和后决条件,其中一些条件相当昂贵 我知道它们在实际构建时会被剥离,但是我可以在播放模式下打开和关闭断言吗 文件说,只有定义了UNITY_断言符号,才会调用断言。如何定义/取消定义?我能想到的最简单的方法是依赖应用程序。isEditor: 你可以看报纸 请注意,在编辑器中运行游戏时(即,在playmode中),这将改变您的断言 文件说,只有定义了UNITY_断言符号,才会调用断言。如何定义/取消定义 通常,您可以在项目设置中执行此操作播放器&右箭头脚本定义符号 但是UNITY\u

我有很多先决条件和后决条件,其中一些条件相当昂贵

我知道它们在实际构建时会被剥离,但是我可以在播放模式下打开和关闭断言吗


文件说,只有定义了UNITY_断言符号,才会调用断言。如何定义/取消定义?

我能想到的最简单的方法是依赖应用程序。isEditor:

你可以看报纸

请注意,在编辑器中运行游戏时(即,在playmode中),这将改变您的断言

文件说,只有定义了UNITY_断言符号,才会调用断言。如何定义/取消定义

通常,您可以在
项目设置中执行此操作<代码>播放器
&右箭头<代码>脚本定义符号

但是
UNITY\u断言实际上由内部控制,因此您应该而不是手动添加该断言

另外,在编辑器的播放模式下,断言始终处于启用状态

但是您可以使用在上面的
脚本定义符号中添加全局定义的方法,另一种方法类似于添加
忽略断言
,然后简单地执行

#如果!忽略所有资产
断言为真(假,“非真”);
#恩迪夫
注意:

  • 如果您有/需要多个定义,则使用
    分隔条目

  • 这始终需要重新编译,因此这实际上不是在播放模式下打开和关闭断言的选项。。您必须等待代码重新编译并重新启动playmode


在运行时工作的一个完整的替代方案可能是简单地实现一个全局脚本,如

使用UnityEditor;
公共静态类断言管理器
{
//让它默认为真,这样做
公共静态bool enabled=true;
[菜单项(“断言/启用断言”,true)]
私有静态bool CanEnable()
{
返回!已启用;
}
[菜单项(“断言/启用断言”)]
私有静态void Enable()
{
启用=真;
}
[菜单项(“断言/禁用断言”,true)]
私有静态boolcandisable()
{
返回启用;
}
[菜单项(“断言/禁用断言”)]
私有静态void Disable()
{
启用=错误;
}
}
必须将其放置在名为
编辑器
的文件夹中,以便稍后从构建中排除它。这在Unity的顶部栏中添加了一个自定义菜单,您现在可以在这里简单地打开和关闭断言

然后在你的脚本中到处使用

\if UNITY\u编辑器
if(AssertionManager.enabled)
#恩迪夫
断言为真(假,“非真”);
为了在编辑器中使用
AssertionManager
设置,然后在生成中使用生成设置中定义的内容

Debug.Assert(Application.isEditor || MyExpensiveCondition(), "Message");