Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Sprite.OverrideGeometry

Объявление

public void OverrideGeometry(Vector2[] vertices, ushort[] triangles);

Параметры

vertices Массив позиций вершин в пространстве Sprite Rect.
triangles Массив индексов треугольников сетки спрайтов.

Описание

Настраивает новую геометрию Sprite.

Позиции вершин находятся в пространстве Sprite.rect, то есть от Rect.zero до Rect.size. Смещение точки поворота и преобразование в единицу пространства выполняются автоматически.

Размер массива треугольников всегда должен быть кратен 3. Вершины, соединенные с треугольником, можно использовать совместно, просто индексируя их в одну и ту же вершину.

UV спрайта рассчитываются автоматически путем сопоставления предоставленной геометрии с текстурой спрайта.

Смотри так же: прямоугольник.

В приведенном ниже примере сценария используется многоугольник, показанный в Редакторе спрайтов — изменение размера многоугольника. В этом случае спрайт имеет 8 сторон. Самая правая вершина перемещается на 50 пикселей внутрь спрайта. Это третья вершина.

// Получить вершины из скрипта и изменить положение // одного из них. Используйте для этого OverrideGeometry(). using UnityEngine; public class ExampleClass : MonoBehaviour { private SpriteRenderer spriteR; private Rect buttonPos1; private Rect buttonPos2; void Start() { spriteR = gameObject.GetComponent<SpriteRenderer>(); // Создайте пустую текстуру и спрайт для переопределения позже. var texture2D = new Texture2D(64, 64); spriteR.sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), Vector2.zero, 100); buttonPos1 = new Rect(10.0f, 10.0f, 200.0f, 30.0f); buttonPos2 = new Rect(10.0f, 50.0f, 200.0f, 30.0f); } void OnGUI() { if (GUI.Button(buttonPos1, "Draw Debug")) DrawDebug(); if (GUI.Button(buttonPos2, "Perform OverrideGeometry")) ChangeSprite(); } // Показать треугольники спрайта void DrawDebug() { Sprite sprite = spriteR.sprite; ushort[] t = sprite.triangles; Vector2[] v = sprite.vertices; int a, b, c; // рисуем треугольники, используя захваченные вершины for (int i = 0; i < t.Length; i = i + 3) { a = t[i]; b = t[i + 1]; c = t[i + 2]; Debug.DrawLine(v[a], v[b], Color.white, 100.0f); Debug.DrawLine(v[b], v[c], Color.white, 100.0f); Debug.DrawLine(v[c], v[a], Color.white, 100.0f); } } // Редактируем вершины, полученные из спрайта. Используйте OverrideGeometry для // отправляем изменения. void ChangeSprite() { Sprite o = spriteR.sprite; Vector2[] sv = o.vertices; for (int i = 0; i < sv.Length; i++) { sv[i].x = Mathf.Clamp( (o.vertices[i].x - o.bounds.center.x - (o.textureRectOffset.x / o.texture.width) + o.bounds.extents.x) / (2.0f * o.bounds.extents.x) * o.rect.width, 0.0f, o.rect.width); sv[i].y = Mathf.Clamp( (o.vertices[i].y - o.bounds.center.y - (o.textureRectOffset.y / o.texture.height) + o.bounds.extents.y) / (2.0f * o.bounds.extents.y) * o.rect.height, 0.0f, o.rect.height); // вносим небольшие изменения в 3-ю вершину if (i == 2) sv[i].x = sv[i].x - 50; } o.OverrideGeometry(sv, o.triangles); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3