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

Dav*_*ave 3 c# unity-game-engine

我知道可以通过这种方式禁用 Unity 中的警告消息:

#pragma warning disable 0168 // variable declared but not used.
Run Code Online (Sandbox Code Playgroud)

但有一个警告,其中没有我需要隐藏的 ID 号。有没有办法在不知道 id 的情况下禁用它,或者我可以在某个地方找到它吗?

警告消息是:BoxColliders 不支持负比例或大小。有效盒子尺寸已被强制为正值,并且可能会产生意外的碰撞几何形状。

这就是它在控制台中的样子: 在此输入图像描述

编辑: 我收到警告的原因是:我有带有多个碰撞器的对象(一些网格,一些盒子以获得更好的性能)。碰撞器嵌套在子对象中。我在父对象上使用 -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));
Run Code Online (Sandbox Code Playgroud)

无论如何,Unity 都会强制比例为正,因此最终结果是相同的。这就是为什么我只想禁用警告。

der*_*ugo 8

#pragma warning disable XY
Run Code Online (Sandbox Code Playgroud)

只能用于禁用编译时警告。

您得到的是相应组件抛出的运行时(可能在编辑器脚本中但仍然是运行时)警告。

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


我猜测,但似乎您正在将大小设置为某个Vector3字段,例如

public Vector3 colliderSize;
Run Code Online (Sandbox Code Playgroud)

通过检查器,然后在玩应用程序并应用该尺寸时获得温暖。

如果你想限制这个至少是0你可以这样做OnValidate

当加载脚本或在检查器中更改值时调用此函数(仅在编辑器中调用)。

为了确保在玩游戏或构建游戏之前纠正该值

private void OnValidate()
{
    colliderSize = new Vector3(Mathf.Max(0, colliderSize.x), Mathf.Max(0, colliderSize.y), Mathf.Max(0, colliderSize.z));
}
Run Code Online (Sandbox Code Playgroud)

或使用例如反转它

private void OnValidate()
{
    colliderSize = new Vector3(Mathf.Abs(colliderSize.x), Mathf.Abs(colliderSize.y), Mathf.Abs(colliderSize.z));
}
Run Code Online (Sandbox Code Playgroud)

然而,总的来说:这是一个警告 - 不是例外 - 可以注意到但可以忽略。

它表明您的代码设置该大小可能有其他问题。但它不会破坏你的游戏。Unity 只是善意地通知您,您尝试在某处使用负值,然后再将其固定0或反转。