如何在不知道警告ID的情况下禁用Unity中的警告?

3

我知道可以通过以下方式在Unity中禁用警告消息:

#pragma warning disable 0168 // variable declared but not used.

但是有一个没有id号码的警告我需要隐藏。是否有一种方法可以在不知道id的情况下禁用它,或者我可以在哪里找到它?
警告信息是:BoxColliders不支持负比例尺寸。有效的框大小已被强制为正,并可能导致意外的碰撞几何形状。 这就是在控制台中的样子: enter image description here 编辑: 我收到警告的原因是:我有多个带有碰撞器的对象(一些网格,一些盒子,以获得更好的性能)。碰撞器嵌套在子对象中。我在父对象上使用-1比例来获得其镜像。对于网格碰撞器而言是可以的,但对于盒子则不是(在将Unity升级到较新版本后出现了此警告)。它没有破坏游戏,但很烦人,这个警告会在设备上显示。我只是想隐藏警告,因为在我的情况下,它对碰撞几何没有影响。
当我给父对象负比例时,其具有碰撞器的子对象仍保持相对于父对象的正比例,但警告仍然会出现。
如果我无法在设备上禁用警告,我将不得不修复它,但更改碰撞器为网格碰撞器是过度的。我能想到的唯一通过代码修复它的方法是将带有碰撞器的子项缩放为根节点的相反数,但我不确定这是否有效。
编辑2: 对于任何遇到此问题的人,我通过根据世界比例缩放所有具有盒式碰撞器的子对象来解决了警告。
transform.localScale = new Vector3(transform.localScale.x * Mathf.Sign(transform.lossyScale.x),
transform.localScale.y * Mathf.Sign(transform.lossyScale.y),
transform.localScale.z * Mathf.Sign(transform.lossyScale.z));

Unity会强制缩放为正数,因此最终结果是相同的。这就是我想要禁用警告的原因。


1
为什么你不直接修复它呢?如果你需要将值变为负数以进行其他操作,可以将数字传入 Math.Abs() 函数获取绝对值。或者直接乘以 -1。 - Christopher
嗨,@Christopher,我同意修复问题总是更好的选择,但这只是一个警告而不是错误,我已经编辑了我的问题来解释为什么我更喜欢禁用它,以及为什么我不确定如何确切地修复它。 - Dave
1个回答

8
#pragma warning disable XY

这个指令只能用于禁用编译期警告。

你所遇到的是由相应组件引发的运行时警告(可能是在编辑器脚本中,但仍然是运行时)。

你可以使用控制台工具栏中的警告开关来禁用(或更好地隐藏)控制台中的所有警告。


我猜测你可能在某处设置了大小,比如从一个Vector3字段中获取大小。

public Vector3 colliderSize;

通过检查器获取警告,然后在使用应用程序并应用该大小时进行警告。如果您想将其限制为至少为0,则可以在OnValidate中这样做。
此函数在脚本加载或检查器中更改值时调用(仅在编辑器中调用)。
为了确保在游戏播放或构建之前纠正该值。
private void OnValidate()
{
    colliderSize = new Vector3(Mathf.Max(0, colliderSize.x), Mathf.Max(0, colliderSize.y), Mathf.Max(0, colliderSize.z));
}

或使用例如反转它。

private void OnValidate()
{
    colliderSize = new Vector3(Mathf.Abs(colliderSize.x), Mathf.Abs(colliderSize.y), Mathf.Abs(colliderSize.z));
}

然而,总体来说:这是一个警告 - 不是异常 - 可以被注意但可以忽略。
这表明您的代码中设置大小的其他地方可能存在问题。但它不会破坏您的游戏。Unity只是友好地提醒您在将值夹在0和反转之前尝试使用了负值。

嗨,感谢您的回答。我已经编辑了我的问题以解释为什么会出现警告。您能否请检查一下并给出一些建议? - Dave
我知道我可以在编辑器中隐藏警告,这不是问题。问题在于,在构建后使用adb logcat时,这些警告会显示在设备上。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接