/* * middle3 middle4 * ^ ^ * | | * 12 | 13 | 14 15 * +----+--------+----+ * | | | | * 8 | | 9 | 10 | 11 * +----+--------+----+---> middle2 * | | | | * | | | | * 4 | | 5 | 6 | 7 * +----+--------+----+---> middle1 * | | | | * | | | | * +----+--------+----+ * 0 1 2 3 */ protected override void OnValidate() { base.OnValidate(); if (_sprite == null) { return; } Vector3 position = pivot.GetPosition(outerSize.x, outerSize.y); float left = position.x; float right = left + outerSize.x; float bottom = position.y; float top = bottom + outerSize.y; float middle1 = bottom + innerPosition.y + (outerSize.y - innerSize.y) * 0.5f; float middle2 = middle1 + innerSize.y; float middle3 = left + innerPosition.x + (outerSize.x - innerSize.x) * 0.5f; float middle4 = middle3 + innerSize.x; float extraLeft = left - middle3; float extraRight = middle4 - right; float extraBottom = bottom - middle1; float extraTop = middle2 - top; middle1 = Mathf.Clamp(middle1, bottom, top); middle2 = Mathf.Clamp(middle2, bottom, top); middle3 = Mathf.Clamp(middle3, left, right); middle4 = Mathf.Clamp(middle4, left, right); // Set vertices _vertices[0].x = left; _vertices[0].y = bottom; _vertices[1].x = middle3; _vertices[1].y = bottom; _vertices[2].x = middle4; _vertices[2].y = bottom; _vertices[3].x = right; _vertices[3].y = bottom; _vertices[4].x = left; _vertices[4].y = middle1; _vertices[5].x = middle3; _vertices[5].y = middle1; _vertices[6].x = middle4; _vertices[6].y = middle1; _vertices[7].x = right; _vertices[7].y = middle1; _vertices[8].x = left; _vertices[8].y = middle2; _vertices[9].x = middle3; _vertices[9].y = middle2; _vertices[10].x = middle4; _vertices[10].y = middle2; _vertices[11].x = right; _vertices[11].y = middle2; _vertices[12].x = left; _vertices[12].y = top; _vertices[13].x = middle3; _vertices[13].y = top; _vertices[14].x = middle4; _vertices[14].y = top; _vertices[15].x = right; _vertices[15].y = top; float marginLeft = extraLeft > 0 ? extraLeft / innerSize.x : 0; float marginRight = extraRight > 0 ? extraRight / innerSize.x : 0; float marginBottom = extraBottom > 0 ? extraBottom / innerSize.y : 0; float marginTop = extraTop > 0 ? extraTop / innerSize.y : 0; float uvLeft = 0; float uvTop = 0; float uvRight = 0; float uvBottom = 0; float uvMiddle1 = 0; float uvMiddle2 = 0; float uvMiddle3 = 0; float uvMiddle4 = 0; _sprite.GetUVs(marginLeft, marginTop, marginRight, marginBottom, ref uvLeft, ref uvTop, ref uvRight, ref uvBottom, ref uvMiddle1, ref uvMiddle2, ref uvMiddle3, ref uvMiddle4); // Set uvs _uvs[0].x = uvLeft; _uvs[0].y = uvBottom; _uvs[1].x = uvMiddle3; _uvs[1].y = uvBottom; _uvs[2].x = uvMiddle4; _uvs[2].y = uvBottom; _uvs[3].x = uvRight; _uvs[3].y = uvBottom; _uvs[4].x = uvLeft; _uvs[4].y = uvMiddle1; _uvs[5].x = uvMiddle3; _uvs[5].y = uvMiddle1; _uvs[6].x = uvMiddle4; _uvs[6].y = uvMiddle1; _uvs[7].x = uvRight; _uvs[7].y = uvMiddle1; _uvs[8].x = uvLeft; _uvs[8].y = uvMiddle2; _uvs[9].x = uvMiddle3; _uvs[9].y = uvMiddle2; _uvs[10].x = uvMiddle4; _uvs[10].y = uvMiddle2; _uvs[11].x = uvRight; _uvs[11].y = uvMiddle2; _uvs[12].x = uvLeft; _uvs[12].y = uvTop; _uvs[13].x = uvMiddle3; _uvs[13].y = uvTop; _uvs[14].x = uvMiddle4; _uvs[14].y = uvTop; _uvs[15].x = uvRight; _uvs[15].y = uvTop; // Get mesh Mesh mesh = GetMesh(); mesh.Clear(); mesh.vertices = _vertices; mesh.triangles = _triangles; mesh.uv = _uvs; mesh.RecalculateNormals(); ; }