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)); }
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); }