Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
 void UpdateSpriteMeshData()
 {
     _spriteMeshData = SpriteMeshUtils.LoadSpriteMeshData(spriteMesh.objectReferenceValue as SpriteMesh);
 }