#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, и она будет исправлена в следующей версии.