Исключение IndexOutOfRangeException только в Mac OS X Standalone

#c# #macos #unity3d

#c# #macos #unity3d

Вопрос:

Я получаю исключение IndexOutOfRange в своей игре, но только в автономной сборке на Mac OS X. Он отлично работает в редакторе Unity как в Windows, так и в OSX, и отлично работает как автономный в Windows и Android. Однако в OSX я получаю следующее исключение:

 IndexOutOfRangeException: Array index is out of range.
  at WorldController.InstantiateChunk (Vector2i pos, .MeshBuildInfo[] meshes) [0x00072] in /Users/sargunster/Code/Unity Projects/block-game/Assets/Scripts/World/Objects/WorldController.cs:226 
  at WorldController.FixedUpdate () [0x00060] in /Users/sargunster/Code/Unity Projects/block-game/Assets/Scripts/World/Objects/WorldController.cs:79 
  

Вот соответствующая функция:

 void InstantiateChunk(Vector2i pos, MeshBuildInfo[] meshes)
{
    float worldX = pos.x * World.CHUNK_SIZE - .5f;
    float worldZ = pos.z * World.CHUNK_SIZE - .5f;

    // for each chunk in the column
    for (int y = 0; y < World.WORLD_HEIGHT; y  )
    {
        float worldY = y * World.CHUNK_SIZE - .5f;

        // instantiate the chunk
        Vector3 position = new Vector3(worldX, worldY, worldZ);
        string name = System.String.Format(" Chunk at ({0}, {1}, {2})", pos.x, y, pos.z);

        // THIS IS WHERE IT HAPPENED
        ChunkRenderer opaque = MakeChunk(position, "Opaque"   name, meshes[y].opaque, opaqueMaterial);

        ChunkRenderer transparent = MakeChunk(position, "Transparent"   name, meshes[y].transparent, transparentMaterial);
        Vector3i chunkPos = new Vector3i(pos.x, y, pos.z);
        opaqueInstances.Add(chunkPos, opaque);
        transparentInstances.Add(chunkPos, transparent);
    }
}
  

Я следил за ссылками, чтобы найти, где meshes был создан экземпляр, и он должен иметь длину WORLD_HEIGHT .

 MeshBuildInfo[] meshes = new MeshBuildInfo[World.WORLD_HEIGHT];
  

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

 > meshes
Evaluation failed.
> 2 2
4
> meshes.Length
Evaluation failed.
> y
0
> position
{(-7168.5, -0.5, 4079.5)}
  

Индекс равен 0, я могу вычислять выражения просто отлично… за исключением массива, который не работает. Я не могу получить его длину или его значение.

Я не знаю, как решить эту проблему. Что означает «Ошибка оценки»? Как индекс может выходить за рамки? Почему это происходит только в OSX? Как мне это исправить?

World.WORLD_HEIGHT является константой со значением 16.

Комментарии:

1. Какой из них является строка 226 в WorldController.cs?

2. Okokok, хотя, может быть, сетки. Длина не может быть оценена, потому что она равна нулю …?

3. Я пометил строку комментарием в коде, который я опубликовал.

4. Ну, сетки также не могут быть оценены.

5. Если meshses не равен null (вы проверили?) затем следующим шагом будет добавление сеток. Длина переменной, чтобы увидеть ее в отладчике.

Ответ №1:

После нескольких дней разочарования из-за этой проблемы я, наконец, решил ее (вроде). Это происходит только тогда, когда игра собрана как x86_64 или Universal. Изменение параметра архитектуры на x86 решило проблему. Должно быть, ошибка Unity.

Комментарии:

1. Я сообщил об ошибке и получил ответное электронное письмо, подтверждающее, что это действительно ошибка Unity, и она будет исправлена в следующей версии.