Sprite.OverrideGeometry

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

Parámetros

verticesArreglo de posiciones de vértice en el espacio Sprite Rect.
trianglesArreglo de índices del triángulo sprite mesh.

Descripción

Define una nueva geometría Sprite.

Vertex positions are in Sprite.rect space meaning from Rect.zero to Rect.size. Pivot offset and transformation to unit space is done automatically.

The size of the triangle array must always be a multiple of 3. The vertices connected to the triangle can be shared by simply indexing into the same vertex.

Los UV de Sprite se calculan automáticamente asignando la geometría proporcionada a la textura de Sprite.

See Also: rect.

In the script example below the polygon shown in the Sprite Editor - Polygon Resizing is used. In this case the sprite has 8 sides. The right-most vertex is moved 50 pixels into the sprite. This is the third vertex.

// Obtain the vertices from the script and modify the position
// of one of them. Use OverrideGeometry() for this.
using UnityEngine;

public class ExampleClass : MonoBehaviour { private SpriteRenderer spriteR; private Rect buttonPos1; private Rect buttonPos2;

void Start() { spriteR = gameObject.GetComponent<SpriteRenderer>(); 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(); }

// Show the sprite triangles void DrawDebug() { Sprite sprite = spriteR.sprite;

ushort[] t = sprite.triangles; Vector2[] v = sprite.vertices; int a, b, c;

// draw the triangles using grabbed vertices 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); } }

// Edit the vertices obtained from the sprite. Use OverrideGeometry to // submit the changes. 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);

// make a small change to the left-most vertex if (i == 2) sv[i].x = sv[i].x - 50; }

o.OverrideGeometry(sv, o.triangles); } }
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961