public void DynamicBoneThread() { while (true) { DynamicBoneMT boneMT = null; //wait event bool bRet = hCalculateEvent.WaitOne(); ++m_nCurFrame; if (bRet) { for (int i = 0; i < lstToCalculateID.Count; ++i) { int nID = lstToCalculateID[i]; if (dictID2Bone.TryGetValue(nID, out boneMT)) { boneMT.UpdateDynamicBones(fDeltaTime); } } lock (objLock) { lstToCalculateID.Clear(); } } else { } ++m_nLastFrame; } }
public void InitBoneTransform(DynamicBone bone) { int nID = bone.GetInstanceID(); DynamicBoneMT boneMT = null; if (!dictID2Bone.TryGetValue(nID, out boneMT)) { Debug.LogFormat("{0} bone is not exist in DictId2Bone", bone.name); return; } if (IsLastFrameDone()) { // set current frame data to boneMT lock (objLock) { if (!lstToCalculateID.Contains(nID)) { boneMT.InitTransform(bone); lstToCalculateID.Add(nID); } } if (m_nCurFrame != 0) { boneMT.ApplyParticlesToTransforms(bone); } //通知线程开始计算 if (lstToCalculateID.Count == dictID2Bone.Count) { hCalculateEvent.Set(); } } }