Unity实现一个morpher/blendShape
using UnityEngine; using System.Collections; [RequireComponent (typeof (MeshFilter))] public class BlendShape : MonoBehaviour { public Mesh[] meshs; #if UNITY_EDITOR public float[] weights; #else float[] weights; #endif bool isChange = false; void Start () { weights = new float[meshs.Length]; System.Array.Clear (weights,0,weights.Length); GetComponent<MeshFilter> ().mesh = meshs [0]; } public void SetWeight(int argIndex,float argWeight) { weights [argIndex] = (argWeight > 1 ? 1: argWeight ); isChange = true; } void Update() { UpdateMesh (); } void UpdateMesh() { #if UNITY_EDITOR #else if (!isChange) return; #endif Mesh mesh = GetComponent<MeshFilter>().mesh; Vector3[] vertices = new Vector3[meshs[0].vertices.Length]; System.Array.Copy (meshs [0].vertices, vertices, vertices.Length); for (int w=1;w<weights.Length;w++) { if (weights[w] <= 0) continue; Vector3[] verticesT = meshs[w].vertices; int i = 0; while (i < vertices.Length) { vertices[i] = vertices[i] + (verticesT[i] - meshs[0].vertices[i]) * weights[w]; i++; } } mesh.vertices = vertices; isChange = false; } }