private static SpriteMesh GenerateSpriteMesh(Sprite sprite) { SpriteMesh spriteMesh = SpriteMeshUtils.CreateSpriteMesh(sprite); SpriteMeshInstance spriteMeshInstance = SpriteMeshUtils.CreateSpriteMeshInstance(spriteMesh, Selection.activeGameObject, true); SpriteMeshCache spriteMeshCache = ScriptableObject.CreateInstance <SpriteMeshCache>(); spriteMeshCache.SetSpriteMesh(spriteMesh, spriteMeshInstance); spriteMeshCache.InitFromOutline(0.25f, 0.05f, true, 0.1f, "set outline"); spriteMeshCache.ApplyChanges(); return(spriteMesh); }
public GameObject Reconstruct(ImportLayerData root, ReconstructData data, GameObject selection) { GameObject rootObject = new GameObject(root.name); if (selection != null) { rootObject.transform.SetParent(selection.transform); } // Create a stack that represents the current parent // as the hierarchy is being traversed Stack <Transform> hierarchy = new Stack <Transform>(); // Add the root object as the first parent hierarchy.Push(rootObject.transform); // Calculate the document pivot position Vector2 docRoot = data.documentSize; docRoot.x *= data.documentPivot.x; docRoot.y *= data.documentPivot.y; // Sorting index accumulator, so sprites draw in correct order int sortIdx = 0; root.Iterate( layer => { // Only process non group layers and layers marked for import if (layer.Childs.Count > 0 || layer.import == false) { return; } // Create an object GameObject layerObject = new GameObject(layer.name); Transform layerT = layerObject.transform; // And attach it to the last layerT.SetParent(hierarchy.Peek()); layerT.SetAsLastSibling(); // Find the sprite for this layer in the data sprite index SpriteMesh spriteMesh; if (data.spriteMeshIndex.TryGetValue(layer.indexId, out spriteMesh)) { SpriteMeshInstance layerRender = SpriteMeshUtils.CreateSpriteMeshInstance(spriteMesh, layerObject, true); layerRender.sortingOrder = sortIdx; sortIdx--; } // Get the layer position Vector2 layerPos = GetLayerPosition(data, layer.indexId); // Express it as a vector Vector2 layerVector = layerPos - docRoot; // This is in pixel units, convert to unity world units layerVector /= data.documentPPU; layerT.position = layerVector; }, checkGroup => checkGroup.import, // Only enter groups if part of the import enterGroupCallback: layer => { // Enter a group, create an object for it GameObject groupObject = new GameObject(layer.name); Transform groupT = groupObject.transform; // Parent to the last hierarchy parent groupT.SetParent(hierarchy.Peek()); // Look at me, I'm the hierarchy parent now hierarchy.Push(groupT); }, exitGroupCallback: layer => { // Go back to the last parent hierarchy.Pop(); }); // Unity 5.6 introduces the sorting group component #if UNITY_5_6_OR_NEWER rootObject.AddComponent <SortingGroup>(); #endif return(rootObject); }
void UpdateSpriteMeshData() { _spriteMeshData = SpriteMeshUtils.LoadSpriteMeshData(spriteMesh.objectReferenceValue as SpriteMesh); }