Пример #1
0
        private void CreateMeshCache(SpriteCache sprite, ISpriteMeshDataProvider meshProvider, ITextureDataProvider textureDataProvider)
        {
            Debug.Assert(m_SkeletonMap.ContainsKey(sprite));

            var guid         = new GUID(sprite.id);
            var mesh         = CreateCache <MeshCache>();
            var skeleton     = m_SkeletonMap[sprite] as SkeletonCache;
            var metaVertices = meshProvider.GetVertices(guid);

            mesh.sprite = sprite;
            mesh.SetCompatibleBoneSet(skeleton.bones);

            foreach (var mv in metaVertices)
            {
                var v = new Vertex2D(mv.position, mv.boneWeight);
                mesh.vertices.Add(v);
            }

            mesh.indices = new List <int>(meshProvider.GetIndices(guid));

            var edges = meshProvider.GetEdges(guid);

            foreach (var e in edges)
            {
                mesh.edges.Add(new Edge(e.x, e.y));
            }

            mesh.textureDataProvider = textureDataProvider;

            m_MeshMap[sprite] = mesh;
        }
        public void OverwriteMesh()
        {
            ISpriteEditorDataProvider mainSpriteDataProvider = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(mainSprite)) as ISpriteEditorDataProvider;

            mainSpriteDataProvider.InitSpriteEditorDataProvider();
            ISpriteMeshDataProvider meshDataProvider = mainSpriteDataProvider.GetDataProvider <ISpriteMeshDataProvider>();

            for (int i = 0; i < spritesToOverwrite.Length; i++)
            {
                ISpriteEditorDataProvider spriteDataProvider = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(spritesToOverwrite[i])) as ISpriteEditorDataProvider;
                spriteDataProvider.InitSpriteEditorDataProvider();
                ISpriteMeshDataProvider meshDataToOverwrite = spriteDataProvider.GetDataProvider <ISpriteMeshDataProvider>();
                GUID toOver   = spritesToOverwrite[i].GetSpriteID();
                GUID mainGuid = mainSprite.GetSpriteID();

                meshDataToOverwrite.SetEdges(toOver, meshDataProvider.GetEdges(mainGuid));
                meshDataToOverwrite.SetIndices(toOver, meshDataProvider.GetIndices(mainGuid));
                meshDataToOverwrite.SetVertices(toOver, meshDataProvider.GetVertices(mainGuid));

                spriteDataProvider.Apply();

                //force SetBindPose
                AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(spritesToOverwrite[i]));
            }

            Debug.Log("Mesh overwritten");
        }
        public BoneCacheManager(ISpriteBoneDataProvider boneDP, ISpriteMeshDataProvider meshDP)
        {
            m_BoneDP = boneDP;
            m_MeshDP = meshDP;

            m_SpriteBoneCache     = new Dictionary <GUID, List <UniqueSpriteBone> >();
            m_BoneUniqueIdInOrder = new Dictionary <GUID, List <GUID> >();
        }
        public void Setup()
        {
            m_ID1 = GUID.Generate();
            m_ID2 = GUID.Generate();

            m_BoneDPMock = Substitute.For <ISpriteBoneDataProvider>();
            m_MeshDPMock = Substitute.For <ISpriteMeshDataProvider>();

            m_BoneDPMock.GetBones(m_ID1).Returns(new List <SpriteBone>());
            m_BoneDPMock.GetBones(m_ID2).Returns(new List <SpriteBone>());

            m_CacheManager = new BoneCacheManager(m_BoneDPMock, m_MeshDPMock);
        }
        public void Setup()
        {
            m_SpriteId = GUID.Generate();

            m_BoneDPMock = Substitute.For <ISpriteBoneDataProvider>();
            m_MeshDPMock = Substitute.For <ISpriteMeshDataProvider>();

            m_CacheManager = new BoneCacheManager(m_BoneDPMock, m_MeshDPMock);

            m_OriginalVertices = new Vertex2DMetaData[10]
            {
                //0
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 0, weight0 = 1.0f
                    }
                },
                //1
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 0, weight0 = 0.5f,
                        boneIndex1 = 1, weight1 = 0.5f
                    }
                },
                //2
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 0, weight0 = 0.25f,
                        boneIndex1 = 2, weight1 = 0.25f,
                        boneIndex2 = 3, weight2 = 0.25f,
                        boneIndex3 = 4, weight3 = 0.25f
                    }
                },
                //3
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 2, weight0 = 0.3f,
                        boneIndex1 = 3, weight1 = 0.3f,
                        boneIndex2 = 4, weight2 = 0.3f
                    }
                },
                //4
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 1, weight0 = 0.5f,
                        boneIndex1 = 3, weight1 = 0.5f
                    }
                },
                //5
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 4, weight0 = 1.0f
                    }
                },
                //6
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 3, weight0 = 0.5f,
                        boneIndex1 = 4, weight1 = 0.5f
                    }
                },
                //7
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 0, weight0 = 0.3f,
                        boneIndex1 = 1, weight1 = 0.3f,
                        boneIndex2 = 5, weight2 = 0.3f
                    }
                },
                //8
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 3, weight0 = 0.5f,
                        boneIndex1 = 5, weight1 = 0.5f
                    }
                },
                //9
                new Vertex2DMetaData()
                {
                    boneWeight = new BoneWeight()
                    {
                        boneIndex0 = 0, weight0 = 0.25f,
                        boneIndex1 = 2, weight1 = 0.25f,
                        boneIndex2 = 4, weight2 = 0.25f,
                        boneIndex3 = 5, weight3 = 0.25f
                    }
                }
            };

            m_ExpectedVertices = new Vertex2DMetaData[m_OriginalVertices.Length];
            m_OriginalVertices.CopyTo(m_ExpectedVertices, 0);

            var spriteBones = new List <SpriteBone>();

            spriteBones.Add(new SpriteBone()
            {
                name = "root", parentId = -1, rotation = Quaternion.identity
            });
            spriteBones.Add(new SpriteBone()
            {
                name = "child_1", parentId = 0, rotation = Quaternion.identity
            });
            spriteBones.Add(new SpriteBone()
            {
                name = "child_1_1", parentId = 1, rotation = Quaternion.identity
            });
            spriteBones.Add(new SpriteBone()
            {
                name = "child_1_2", parentId = 1, rotation = Quaternion.identity
            });
            spriteBones.Add(new SpriteBone()
            {
                name = "child_1_2_1", parentId = 3, rotation = Quaternion.identity
            });
            spriteBones.Add(new SpriteBone()
            {
                name = "child_1_2_2", parentId = 3, rotation = Quaternion.identity
            });

            m_BoneDPMock.GetBones(m_SpriteId).Returns(spriteBones);
            m_MeshDPMock.GetVertices(m_SpriteId).Returns(m_OriginalVertices);

            var uniqueBone = m_CacheManager.GetSpriteBoneRawData(m_SpriteId);

            m_Model = new BoneModel(() => { });
            m_Model.SetRawData(uniqueBone, Vector3.zero);
        }