コード例 #1
0
ファイル: P3dSeamFixer.cs プロジェクト: mymy0301/escapeplan
        public void Generate()
        {
            Generate(source, ref mesh, channel, threshold, border);
#if UNITY_EDITOR
            if (P3dHelper.IsAsset(this) == true)
            {
                var assets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(this));

                for (var i = 0; i < assets.Length; i++)
                {
                    var assetMesh = assets[i] as Mesh;

                    if (assetMesh != null && assetMesh != mesh)
                    {
                        DestroyImmediate(assetMesh, true);
                    }
                }

                if (P3dHelper.IsAsset(mesh) == false)
                {
                    AssetDatabase.AddObjectToAsset(mesh, this);
                }
            }
#endif
#if UNITY_EDITOR
            if (P3dHelper.IsAsset(this) == true)
            {
                P3dHelper.ReimportAsset(this);
            }
#endif
        }
コード例 #2
0
        public void Generate()
        {
#if UNITY_EDITOR
            Undo.RecordObject(this, "Generate Seam Fix");
#endif


            if (meshes != null)
            {
                foreach (var pair in meshes)
                {
                    if (pair.Source != null)
                    {
                        if (pair.Output == null)
                        {
                            pair.Output = new Mesh();
                        }

                        pair.Output.name = pair.Source.name + " (Fixed Seams)";

                        Generate(pair.Source, pair.Output, coord, threshold, border);
                    }
                    else
                    {
                        DestroyImmediate(pair.Output);

                        pair.Output = null;
                    }
                }
            }
#if UNITY_EDITOR
            if (P3dHelper.IsAsset(this) == true)
            {
                var assets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(this));

                for (var i = 0; i < assets.Length; i++)
                {
                    var assetMesh = assets[i] as Mesh;

                    if (assetMesh != null)
                    {
                        if (meshes == null || meshes.Exists(p => p.Output == assetMesh) == false)
                        {
                            DestroyImmediate(assetMesh, true);
                        }
                    }
                }

                if (meshes != null)
                {
                    foreach (var pair in meshes)
                    {
                        if (pair.Output != null && P3dHelper.IsAsset(pair.Output) == false)
                        {
                            AssetDatabase.AddObjectToAsset(pair.Output, this);

                            AssetDatabase.SaveAssets();
                        }
                    }
                }
            }

            if (P3dHelper.IsAsset(this) == true)
            {
                P3dHelper.ReimportAsset(this);
            }

            EditorUtility.SetDirty(this);
#endif
        }
コード例 #3
0
        public void Generate()
        {
            if (source != null)
            {
                if (mesh == null)
                {
                    mesh = new Mesh();
                }

                mesh.Clear(false);
                insertions.Clear();

                mesh.name         = source.name + " (Fixed Seams)";
                mesh.bindposes    = source.bindposes;
                mesh.bounds       = source.bounds;
                mesh.subMeshCount = source.subMeshCount;

                source.GetBoneWeights(boneWeights);
                source.GetColors(colors);
                source.GetNormals(normals);
                source.GetTangents(tangents);
                source.GetUVs(0, coords0);
                source.GetUVs(1, coords1);
                source.GetUVs(2, coords2);
                source.GetUVs(3, coords3);
                source.GetVertices(positions);

                DoGenerate();

                mesh.boneWeights = boneWeights.ToArray();
                mesh.SetColors(colors);
                mesh.SetNormals(normals);
                mesh.SetTangents(tangents);
                mesh.SetUVs(0, coords0);
                mesh.SetUVs(1, coords1);
                mesh.SetUVs(2, coords2);
                mesh.SetUVs(3, coords3);

                if (source.blendShapeCount > 0)
                {
                    var tempDeltaVertices = new Vector3[source.vertexCount];
                    var tempDeltaNormals  = new Vector3[source.vertexCount];
                    var tempDeltaTangents = new Vector3[source.vertexCount];

                    for (var i = 0; i < source.blendShapeCount; i++)
                    {
                        var shapeName  = source.GetBlendShapeName(i);
                        var frameCount = source.GetBlendShapeFrameCount(i);

                        for (var j = 0; j < frameCount; j++)
                        {
                            source.GetBlendShapeFrameVertices(i, j, tempDeltaVertices, tempDeltaNormals, tempDeltaTangents);

                            deltaVertices.Clear();
                            deltaNormals.Clear();
                            deltaTangents.Clear();

                            deltaVertices.AddRange(tempDeltaVertices);
                            deltaNormals.AddRange(tempDeltaNormals);
                            deltaTangents.AddRange(tempDeltaTangents);

                            for (var k = 0; k < insertions.Count; k++)
                            {
                                var insertion = insertions[k];

                                deltaVertices.Add(deltaVertices[insertion]);
                                deltaNormals.Add(deltaNormals[insertion]);
                                deltaTangents.Add(deltaTangents[insertion]);
                            }

                            mesh.AddBlendShapeFrame(shapeName, source.GetBlendShapeFrameWeight(i, j), deltaVertices.ToArray(), deltaNormals.ToArray(), deltaTangents.ToArray());
                        }
                    }
                }

#if UNITY_EDITOR
                if (P3dHelper.IsAsset(this) == true)
                {
                    var assets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(this));

                    for (var i = 0; i < assets.Length; i++)
                    {
                        var assetMesh = assets[i] as Mesh;

                        if (assetMesh != null && assetMesh != mesh)
                        {
                            DestroyImmediate(assetMesh, true);
                        }
                    }

                    if (P3dHelper.IsAsset(mesh) == false)
                    {
                        AssetDatabase.AddObjectToAsset(mesh, this);
                    }
                }
#endif
            }

#if UNITY_EDITOR
            if (P3dHelper.IsAsset(this) == true)
            {
                P3dHelper.ReimportAsset(this);
            }
#endif
        }
コード例 #4
0
        public void Generate()
        {
            if (source != null)
            {
                if (mesh == null)
                {
                    mesh = new Mesh();
                }

                mesh.Clear(false);
                mesh.name = source.name + " (Copied Coords)";

                mesh.bindposes    = source.bindposes;
                mesh.bounds       = source.bounds;
                mesh.subMeshCount = source.subMeshCount;

                source.GetBoneWeights(boneWeights);
                source.GetColors(colors);
                source.GetNormals(normals);
                source.GetTangents(tangents);
                source.GetUVs(0, coords0);
                source.GetUVs(1, coords1);
                source.GetUVs(2, coords2);
                source.GetUVs(3, coords3);
                source.GetVertices(positions);

                mesh.SetVertices(positions);

                for (var i = 0; i < source.subMeshCount; i++)
                {
                    source.GetTriangles(indices, i);

                    mesh.SetTriangles(indices, i);
                }

                mesh.boneWeights = boneWeights.ToArray();
                mesh.SetColors(colors);
                mesh.SetNormals(normals);
                mesh.SetTangents(tangents);

                mesh.SetUVs(0, GetCoords(first));
                mesh.SetUVs(1, GetCoords(second));
                mesh.SetUVs(2, GetCoords(third));
                mesh.SetUVs(3, GetCoords(fourth));

                if (source.blendShapeCount > 0)
                {
                    var deltaVertices = new Vector3[source.vertexCount];
                    var deltaNormals  = new Vector3[source.vertexCount];
                    var deltaTangents = new Vector3[source.vertexCount];

                    for (var i = 0; i < source.blendShapeCount; i++)
                    {
                        var shapeName  = source.GetBlendShapeName(i);
                        var frameCount = source.GetBlendShapeFrameCount(i);

                        for (var j = 0; j < frameCount; j++)
                        {
                            source.GetBlendShapeFrameVertices(i, j, deltaVertices, deltaNormals, deltaTangents);

                            mesh.AddBlendShapeFrame(shapeName, source.GetBlendShapeFrameWeight(i, j), deltaVertices, deltaNormals, deltaTangents);
                        }
                    }
                }

#if UNITY_EDITOR
                if (P3dHelper.IsAsset(this) == true)
                {
                    var assets = UnityEditor.AssetDatabase.LoadAllAssetsAtPath(UnityEditor.AssetDatabase.GetAssetPath(this));

                    for (var i = 0; i < assets.Length; i++)
                    {
                        var assetMesh = assets[i] as Mesh;

                        if (assetMesh != null && assetMesh != mesh)
                        {
                            DestroyImmediate(assetMesh, true);
                        }
                    }

                    if (P3dHelper.IsAsset(mesh) == false)
                    {
                        UnityEditor.AssetDatabase.AddObjectToAsset(mesh, this);

                        UnityEditor.AssetDatabase.SaveAssets();
                    }
                }
#endif
            }

#if UNITY_EDITOR
            if (P3dHelper.IsAsset(this) == true)
            {
                P3dHelper.ReimportAsset(this);
            }
#endif
        }
コード例 #5
0
        public void Generate()
        {
            if (source != null)
            {
                if (mesh == null)
                {
                    mesh = new Mesh();
                }

                mesh.Clear(false);
                mesh.name = source.name + " (Fixed Seams)";

                mesh.bindposes    = source.bindposes;
                mesh.bounds       = source.bounds;
                mesh.subMeshCount = source.subMeshCount;

                source.GetBoneWeights(boneWeights);
                source.GetColors(colors);
                source.GetNormals(normals);
                source.GetTangents(tangents);
                source.GetUVs(0, coords0);
                source.GetUVs(1, coords1);
                source.GetUVs(2, coords2);
                source.GetUVs(3, coords3);
                source.GetVertices(positions);

                DoGenerate();

                mesh.boneWeights = boneWeights.ToArray();
                mesh.SetColors(colors);
                mesh.SetNormals(normals);
                mesh.SetTangents(tangents);
                mesh.SetUVs(0, coords0);
                mesh.SetUVs(1, coords1);
                mesh.SetUVs(2, coords2);
                mesh.SetUVs(3, coords3);

#if UNITY_EDITOR
                if (P3dHelper.IsAsset(this) == true)
                {
                    var assets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(this));

                    for (var i = 0; i < assets.Length; i++)
                    {
                        var assetMesh = assets[i] as Mesh;

                        if (assetMesh != null && assetMesh != mesh)
                        {
                            DestroyImmediate(assetMesh, true);
                        }
                    }

                    if (P3dHelper.IsAsset(mesh) == false)
                    {
                        AssetDatabase.AddObjectToAsset(mesh, this);
                    }
                }
#endif
            }

#if UNITY_EDITOR
            if (P3dHelper.IsAsset(this) == true)
            {
                P3dHelper.ReimportAsset(this);
            }
#endif
        }