UnityAPI手册-2019.4官网版
文集大纲加载中……
本文档使用 MrDoc 发布
-
+
首页
Sprite.OverrideGeometry
# [Sprite](https://docs.unity3d.com/cn/2019.4/ScriptReference/Sprite.html).OverrideGeometry public void **OverrideGeometry** (Vector2[] **vertices**, ushort[] **triangles**); ## 参数 | vertices | 精灵 Rect 空间中顶点位置的数组。 | | ----------- | ---------------------------------- | | triangles | 精灵网格三角形索引的数组。 | ## 描述 设置新的精灵几何形状。 顶点位置位于 [Sprite.rect](https://docs.unity3d.com/cn/2019.4/ScriptReference/Sprite-rect.html) 空间中,范围为 [Rect.zero](https://docs.unity3d.com/cn/2019.4/ScriptReference/Rect-zero.html) 到 [Rect.size](https://docs.unity3d.com/cn/2019.4/ScriptReference/Rect-size.html)。轴心偏移和单位空间变换是自动完成的。 三角形数组的大小必须始终是 3 的倍数。 通过直接索引到相同顶点可以共享连接到三角形的顶点。 通过将提供的几何形状映射到精灵纹理来自动计算精灵 UV。 另请参阅:[rect](https://docs.unity3d.com/cn/2019.4/ScriptReference/Sprite-rect.html)。 下面的脚本示例 使用了 [Sprite Editor - Polygon Resizing](https://docs.unity3d.com/cn/2019.4/Manual/SpriteEditor.html) 中显示的多边形。在本例中, 精灵有 8 条边。将最右侧的顶点移动到精灵内部 50 像素处。 此为第三个顶点。 ``` // 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>(); // Create a blank Texture and Sprite to override later on. 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(); } // 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 3rd vertex if (i == 2) sv[i].x = sv[i].x - 50; } o.OverrideGeometry(sv, o.triangles); } } ```
da
2022年6月21日 11:24
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码