В 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 не изменяются при изменении свойств преобразования - эти значения находятся в локальных координатах.