Почему Debug.Assert показывает сообщение об ошибке, даже если длина все время равна 1? - PullRequest
1 голос
/ 18 февраля 2020
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 все время 1, но он все еще показывает сообщение об ошибке "Ожидается ровно 1 такой щит, как этот ... "

Метод GetDoorShaderPrefab вызывается много раз в другом месте скрипта. Но каждый раз, когда Длина равна 1, он продолжает показывать сообщение об ошибке.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2020

Я думаю, что ваше состояние должно быть == 1, поэтому:

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

Сообщение отображается, когда условие false. Из документов :

Assert (Boolean, String)

Проверяет условие; если условие false, выводит указанное сообщение и отображает окно сообщения, в котором отображается стек вызовов.

Идея состоит в том, что утверждения проверяют некоторые условия, и он будет только жаловаться, если ваше утверждение неправильно.

Чтобы легко запомнить, условие и текст должны говорить то же самое, а не наоборот.

1 голос
/ 18 февраля 2020

Согласно документации Debug.Assert показывает сообщение, если условие false ....

Поэтому, когда вы говорите "shieldPrefab.Length! = 1 "это всегда ложно, потому что длина всегда равна 1.

Если вы хотите проверить, равна ли длина , а не 1, вам нужно применить обратное:

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