示例#1
0
        public BlendShape ToBlendShape()
        {
            var shapeFrames = new BlendShapeFrame[frames.Length];

            for (int i = 0; i < shapeFrames.Length; i++)
            {
                shapeFrames[i] = frames[i].ToBlendShapeFrame();
            }
            return(new BlendShape(shapeName, shapeFrames));
        }
示例#2
0
    void Start()
    {
        if (avatar == null)
        {
            return;
        }
        _distGo = Instantiate(avatar);
        _smrs   = _distGo.GetComponentsInChildren <SkinnedMeshRenderer>();
        _meshes = new Mesh[_smrs.Length];
        var smrsCount = _smrs.Length;

        for (int i = 0; i < smrsCount; i++)
        {
            if (!_smrs[i].sharedMesh.isReadable)
            {
                throw new Exception(errMessageMeshReadable);
            }
            _meshes[i] = Instantiate(_smrs[i].sharedMesh);
        }

        var mesh             = _meshes[5];
        var blendCount       = mesh.blendShapeCount;
        var blendShapeFrames = new List <BlendShapeFrame>();

        for (int i = 0; i < blendCount; i++)
        {
            // blendShapeFrameCount を取得する (大抵1である)
            var bsc = mesh.GetBlendShapeFrameCount(i);
            for (int j = 0; j < bsc; j++)
            {
                var frame = new BlendShapeFrame(mesh, i, j);
                blendShapeFrames.Add(frame);
            }
        }
        Debug.Log("See");

        var newMesh = Instantiate(mesh);

        newMesh.name = newMesh.name.Substring(0, newMesh.name.IndexOf('('));
        newMesh.ClearBlendShapes();
        for (int i = 0; i < 8; i++)
        {
            newMesh.AddBlendShapeFrame(
                blendShapeFrames[i].name,
                1.0f,
                blendShapeFrames[i].vertices,
                blendShapeFrames[i].normals,
                blendShapeFrames[i].tangents
                );
        }

        _smrs[5].sharedMesh = newMesh;
        Debug.Log("You");
    }
            public static BlendShapeData CreateFromMesh(Mesh sharedMesh)
            {
                var blendShapeData = new BlendShapeData
                {
                    blendShapeCount = sharedMesh.blendShapeCount,
                    blendShapes     = new BlendShapeShape[sharedMesh.blendShapeCount]
                };

                for (int i = 0; i < blendShapeData.blendShapeCount; i++)
                {
                    var blendShapeFrameCount = sharedMesh.GetBlendShapeFrameCount(i);
                    blendShapeData.blendShapes[i] = new BlendShapeShape
                    {
                        frameCount = blendShapeFrameCount,
                        name       = sharedMesh.GetBlendShapeName(i),
                        frames     = new BlendShapeFrame[blendShapeFrameCount]
                    };

                    for (int j = 0; j < blendShapeFrameCount; j++)
                    {
                        var blendShapeFrame = new BlendShapeFrame
                        {
                            weight           = sharedMesh.GetBlendShapeFrameWeight(i, j),
                            shapeIndex       = i,
                            frameIndex       = j,
                            deltaNormals     = new Vector3[sharedMesh.vertexCount],
                            deltaTangents    = new Vector3[sharedMesh.vertexCount],
                            deltaVertices    = new Vector3[sharedMesh.vertexCount],
                            newDeltaNormals  = new List <Vector3>(),
                            newDeltaTangents = new List <Vector3>(),
                            newDeltaVertices = new List <Vector3>()
                        };

                        sharedMesh.GetBlendShapeFrameVertices(i, j, blendShapeFrame.deltaVertices,
                                                              blendShapeFrame.deltaNormals, blendShapeFrame.deltaTangents);

                        blendShapeData.blendShapes[i].frames[j] = blendShapeFrame;
                    }
                }

                return(blendShapeData);
            }