예제 #1
0
        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;
        }
예제 #2
0
        /// <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);
                        }
                    }
                }
            }
        }