В Unity получить сетку или иначе получить локальные границы на Sprite?

Этот вопрос касается только игрового движка Unity.

Вот наглядный пример так называемого "спрайта" Unity (класса Unity Sprite), который представляет собой тонкий трехмерный объект.

Показано AABB (зеленые линии). В Unity живая AABB от GPU дается через .bounds ( доко). Если новичок в CG, объяснение AABB.

(Обратите внимание, что "локальный" в Unity ( doco, doco) означает: в кватернионе родительского объекта; "мир" означает в кватернионе объекта сцены.)

Сейчас! Для любого инженера Unity, читающего:

Обычно в Unity, с видимым объектом, когда вы хотите получить границы Unity,

если вы хотите их в мировом пространстве, renderer.bounds возвращает границы единства в мировом пространстве.

если вы хотите их в местном пространстве, mesh.bounds возвращает Unity Bounds в локальном пространстве.

Это основа Unity, и вы делаете это постоянно. Тем не мение. С новым спрайтом, то есть SpriteRendererНасколько я знаю, нет реального доступа к мешу.

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

Как же тогда вы можете получить локальные границы единства для спрайта?

(Обратите внимание, что sprite.bounds само по себе то же самое renderer.bounds, это не помогает.)

1 ответ

Решение

Я думаю, что вы ищете SpriteRenderer.sprite.bounds,

public class LogBounds : MonoBehaviour {
    void OnGUI () {
        var r = GetComponent<SpriteRenderer>();
        GUILayout.Label("SpriteRenderer.bounds center " + r.bounds.center + " size " + r.bounds.size);
        GUILayout.Label("SpriteRenderer.sprite.bounds center " + r.sprite.bounds.center + " size " + r.sprite.bounds.size);
    }
}

пример

Обратите внимание, что значения для SpriteRenderer.sprite.bounds не изменяются при изменении свойств преобразования - эти значения находятся в локальных координатах.

Другие вопросы по тегам