public void CreateExpression(string name) { List <BlendPair> blendPairs = new List <BlendPair>(); for (int i = 0; i < blendshapeCount; i++) { float w = skinnedMeshRenderers[0].GetBlendShapeWeight(i); if (w != 0f) { blendPairs.Add(new BlendPair { index = i, weight = w }); } } BlendValueGroup group = new BlendValueGroup { blendValues = blendPairs.ToArray(), }; blendMap[name] = group; }
/// <summary> /// Runtime morph /// </summary> /// <param name="name"></param> /// <param name="morphTime"></param> /// <param name="holdTime"></param> public void SetExpression(string name, float morphTime = 1f, float holdTime = 2f) { if (blendMap.ContainsKey(name)) { BlendValueGroup group = blendMap[name]; for (int i = 0; i < group.blendValues.Length; i++) { float weight = group.blendValues[i].weight; int primaryIndex = group.blendValues[i].index; TweenMorph(skinnedMeshRenderers[0], primaryIndex, weight, morphTime, holdTime); string blendName = skinnedMeshRenderers[0].sharedMesh.GetBlendShapeName(primaryIndex); for (int j = 1; j < skinnedMeshRenderers.Length; j++) { int correspondingIndex = skinnedMeshRenderers[j].sharedMesh.GetBlendShapeIndex(blendName); if (correspondingIndex >= 0) { TweenMorph(skinnedMeshRenderers[j], correspondingIndex, weight, morphTime, holdTime); } } } } }