public static PolygonTriangulator2D.Triangulation GetTriangulation(PolygonTriangulator2D.Triangulation setting) { Slicer2DSettingsProfile profile = GetProfile(); if (profile == null) { Debug.LogWarning("Profile Settings Are Missing"); return(setting); } if (profile.triangulation == Triangulation.Default) { return(setting); } else { int triangulationID = (int)profile.triangulation - 1; return((PolygonTriangulator2D.Triangulation)triangulationID); } }
public Mesh CreateMesh(GameObject gameObject, Vector2 UVScale, Vector2 UVOffset, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced) { if (gameObject.GetComponent <MeshRenderer>() == null) { gameObject.AddComponent <MeshRenderer>(); } MeshFilter filter = gameObject.GetComponent <MeshFilter> (); if (filter == null) { filter = gameObject.AddComponent <MeshFilter>() as MeshFilter; } filter.sharedMesh = PolygonTriangulator2D.Triangulate(this, UVScale, UVOffset, triangulation); if (filter.sharedMesh == null) { UnityEngine.Object.Destroy(gameObject); } return(filter.sharedMesh); }
public static void SpriteToMesh(GameObject gameObject, VirtualSpriteRenderer spriteRenderer, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced) { Texture2D texture = null; Sprite sprite = null; if (spriteRenderer.sprite != null) { sprite = spriteRenderer.sprite; texture = sprite.texture; } float spriteSheetU = (float)(texture.width) / sprite.rect.width; float spriteSheetV = (float)(texture.height) / sprite.rect.height; Rect rect = sprite.rect; Rect uvRect = new Rect((float)rect.x / texture.width, (float)rect.y / texture.height, (float)rect.width / texture.width, (float)rect.height / texture.height); Vector2 scale = new Vector2(spriteSheetU * rect.width / sprite.pixelsPerUnit, spriteSheetV * rect.height / spriteRenderer.sprite.pixelsPerUnit); if (spriteRenderer.flipX) { scale.x = -scale.x; } if (spriteRenderer.flipY) { scale.y = -scale.y; } float pivotX = sprite.pivot.x / sprite.rect.width - 0.5f; float pivotY = sprite.pivot.y / sprite.rect.height - 0.5f; float ix = -0.5f + pivotX / spriteSheetU; float iy = -0.5f + pivotY / spriteSheetV; Vector2 uvOffset = new Vector2(uvRect.center.x + ix, uvRect.center.y + iy); Polygon2D polygon2D = Polygon2DList.CreateFromGameObject(gameObject)[0]; polygon2D.CreateMesh(gameObject, scale, uvOffset, triangulation); MeshRenderer meshRenderer = gameObject.GetComponent <MeshRenderer> (); if (meshRenderer == null) { meshRenderer = gameObject.AddComponent <MeshRenderer> (); } meshRenderer.sharedMaterial = spriteRenderer.material; meshRenderer.sharedMaterial.mainTexture = texture; meshRenderer.sharedMaterial.color = spriteRenderer.color; meshRenderer.sortingLayerName = spriteRenderer.sortingLayerName; meshRenderer.sortingLayerID = spriteRenderer.sortingLayerID; meshRenderer.sortingOrder = spriteRenderer.sortingOrder; }
public Mesh CreateMesh(Vector2 UVScale, Vector2 UVOffset, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced) { return(PolygonTriangulator2D.Triangulate(this, UVScale, UVOffset, triangulation)); }
public Mesh CreateMesh3D(GameObject gameObject, float zSize, Vector2 UVScale, Vector2 UVOffset, float uvRotation, PolygonTriangulator2D.Triangulation triangulation) { MeshRenderer meshRenderer = gameObject.GetComponent <MeshRenderer>(); if (meshRenderer == null) { meshRenderer = gameObject.AddComponent <MeshRenderer>(); } MeshFilter filter = gameObject.GetComponent <MeshFilter> (); if (filter == null) { filter = gameObject.AddComponent <MeshFilter>() as MeshFilter; } filter.sharedMesh = PolygonTriangulator2D.Triangulate3D(this, zSize, UVScale, UVOffset, uvRotation, triangulation); if (filter.sharedMesh == null) { UnityEngine.Object.Destroy(gameObject); } return(filter.sharedMesh); }
public static Mesh CreateMesh(List <Polygon2D> polygons, GameObject gameObject, Vector2 UVScale, Vector2 UVOffset, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced) { if (gameObject.GetComponent <MeshRenderer>() == null) { gameObject.AddComponent <MeshRenderer>(); } MeshFilter filter = gameObject.GetComponent <MeshFilter> (); if (filter == null) { filter = gameObject.AddComponent <MeshFilter>() as MeshFilter; } CombineInstance[] combine = new CombineInstance[polygons.Count]; for (int i = 0; i < polygons.Count; i++) { Polygon2D poly = polygons[i]; combine[i].mesh = PolygonTriangulator2D.Triangulate(poly, UVScale, UVOffset, triangulation); combine[i].transform = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, 0), Vector3.one); } Mesh mesh = new Mesh(); mesh.CombineMeshes(combine); filter.sharedMesh = mesh; if (filter.sharedMesh == null) { UnityEngine.Object.Destroy(gameObject); } return(filter.sharedMesh); }