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

时间:2019-08-05 22:06:30

标签: c# unity3d

我知道可以通过以下方式在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));

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

1 个答案:

答案 0 :(得分:3)

#pragma warning disable XY

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

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

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


我正在猜测,但似乎您是在将尺寸设置为例如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或反过来。

相关问题