Ошибка отображения Gizmos.DrawCube, когда несколько кубов нарисованы рядом друг с другом - PullRequest
2 голосов
/ 29 января 2020

Когда я рисую несколько кубов, используя Gizmos.DrawCube для визуализации некоторых трехмерных плиток, я получаю кучу кубов наизнанку. Он вызывается из кода редактора. Вот код для вызова:

private void OnDrawGizmos() {
    foreach (Vector3Int position in positions) {
        Gizmos.DrawCube(position * Const.tileSize, Const.tileVectorSize);
    }
}

Вот ошибка отображения:

Display bug

Но все в порядке, когда _position содержит только 1 куб Everything is ok with only one cube

Редактировать: Это также происходит с несколькими нарисованными кубами:

enter image description here

Есть идеи, что происходит и как это исправить?

1 Ответ

3 голосов
/ 29 января 2020

На самом деле это не ошибка. Гизмо не записывает в буфер глубины. Что это означает (и то, что вы видите на изображении), так это то, что вещицы нарисованы друг над другом, независимо от того, находятся ли они позади другой вещицы. Может быть, есть какой-нибудь способ включить запись в буфер глубины или zWrite на gizmos, теперь вы знаете, что искать. Тем временем вы можете попробовать алгоритм Painter . Это просто сортировка вещиц от самых дальних от камеры до ближайших, прежде чем вы их рисуете.

private void OnDrawGizmos()
{        
    var sorted = positions.OrderByDescending((x) => Vector3.Distance(Camera.current.transform.position, x));

    foreach (Vector3Int position in sorted)
    {
        Gizmos.DrawCube(position * Const.tileSize, Const.tileVectorSize);
    }
}

И вот как это выглядит: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...