public void Destory() { Triangles = null; Uv = null; if (null != AnimationsWithAttach) { var itor = AnimationsWithAttach.GetEnumerator(); while (itor.MoveNext()) { Dictionary <string, MeshAnimationData> dataDict = itor.Current.Value; if (null != dataDict) { var dataItor = dataDict.GetEnumerator(); while (dataItor.MoveNext()) { dataItor.Current.Value.Destory(); } dataItor.Dispose(); dataDict.Clear(); } } itor.Dispose(); AnimationsWithAttach.Clear(); AnimationsWithAttach = null; } Animations = null; }
public void BuildAnimByCombinedTex(MeshSkinData skinData, int attachId) { int totalNum = skinData.arrayLength; //attach num //int maxVertex = skinData.maxVertexCount; if (attachId >= totalNum) { UnityEngine.Debug.LogError("over the attach size"); return; } //读取8个动作数据 for (int i = 0; i < 8; i++) { string animationName = g_defaultAnimationArray[i]; if (!animationName.StartsWith("Wait") && !skinData.isLoadAllInMainScene) { continue; } MeshSkinData.ClipData clip = skinData.meshes[attachId].clips[i]; int frameCount = clip.frames.Length; if (frameCount == 0) { continue; } Vector3[][] animData = new Vector3[frameCount][]; //每个动作顶点 for (int curFrame = 0; curFrame < frameCount; curFrame++) { animData[curFrame] = clip.frames[curFrame].vertexs; } Dictionary <string, MeshAnimationData> animationDataDict; bool hasDict = AnimationsWithAttach.TryGetValue(attachId, out animationDataDict); if (!hasDict) { animationDataDict = new Dictionary <string, MeshAnimationData>(); AnimationsWithAttach.Add(attachId, animationDataDict); } animationDataDict.Add(animationName, new MeshAnimationData(animationName, animData, skinData.GenerateNormal)); } }