为什么 Debug.Assert 即使长度一直为 1 也会显示错误消息?

Why the Debug.Assert show the error message even if the Length is 1 all the time?

private GameObject GetDoorShaderPrefab()
    {
        string[] shieldPrefab = AssetDatabase.FindAssets(c_doorShieldFxLocked);
        Debug.Assert(shieldPrefab.Length != 1, "Expected exactly 1 shield like this...");
        string shieldGuid = shieldPrefab[0];
        string prefabPath = AssetDatabase.GUIDToAssetPath(shieldGuid);
        GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
        Debug.Assert(prefab != null, "Expected prefab to load");
        return prefab;
    }

我在一行中使用了一个断点:

Debug.Assert(shieldPrefab.Length != 1, "Expected exactly 1 shield like this...");

shieldPrefab的Length一直是1,但还是显示错误信息"Expected exactly 1 shield like this..."

在脚本的其他地方多次调用 GetDoorShaderPrefab 方法。但是每次长度为1时,它一直显示错误信息。

我觉得你的情况应该是== 1 所以:

Debug.Assert(shieldPrefab.Length == 1, "Expected exactly 1 shield like this...");

条件为false时显示该消息。来自 docs:

Assert(Boolean, String)

Checks for a condition; if the condition is false, outputs a specified message and displays a message box that shows the call stack.

想法是断言检查一些条件,它只会抱怨你的断言是错误的。

为了方便记忆,条件和文字应该告诉你相同的,而不是相反的。

根据 documentation Debug.Assert 显示消息如果条件为 false...

因此,当您说 "shieldPrefab.Length != 1" 时,这始终是错误的,因为长度始终为 1。

如果你想检查长度是否不是 1你需要应用相反的:

Debug.Assert(shieldPrefab.Length == 1, "Expected exactly 1 shield like this...");