void ReadWriteHierarchy(Transform h,bool record)
{
if(!h){
Debug.Log ("Empty skeleton detected!");
return;
}
if(!record){
if(curBoneId ==0 && rootPositionConstraint.HasConstraint()){
tempV3 = h.localPosition;
if(!rootPositionConstraint.x)
tempV3.x = animClip.bonesStates[curBoneId].samples[curSample].pos.Read().x;
if(!rootPositionConstraint.y)
tempV3.y = animClip.bonesStates[curBoneId].samples[curSample].pos.Read().y;
if(!rootPositionConstraint.z)
tempV3.z = animClip.bonesStates[curBoneId].samples[curSample].pos.Read().z;
h.localPosition = tempV3;
}else{
//Debug.Log ("cur sample:"+curSample+"curBone:"+curBoneId+"source skeleton bone name:"+h.name);
//Debug.Log ( "bone position"+animClip.bonesStates[curBoneId].samples[curSample].pos.Read ().ToString());
h.localPosition = animClip.bonesStates[curBoneId].samples[curSample].pos.Read ();
}
if(curBoneId == 0 && rootRotationConstraint.HasConstraint()){
tempV3 = h.localEulerAngles;
if(!rootRotationConstraint.x)
tempV3.x = animClip.bonesStates[curBoneId].samples[curSample].rot.Read().eulerAngles.x;
if(!rootRotationConstraint.y)
tempV3.y = animClip.bonesStates[curBoneId].samples[curSample].rot.Read().eulerAngles.y;
if(!rootRotationConstraint.z)
tempV3.z = animClip.bonesStates[curBoneId].samples[curSample].rot.Read().eulerAngles.z;
h.localEulerAngles = tempV3;
}else h.localRotation = animClip.bonesStates[curBoneId].samples[curSample].rot.Read();
h.localScale = animClip.bonesStates[curBoneId].samples[curSample].scale.Read ();
}else{
tempRot = h.localRotation;
animClip.bonesStates[curBoneId].AddSample (new BoneStateSample(h.localPosition,tempRot,h.localScale));
}
//Debug.Log ("bone '"+h.name+"' local angles recorded :"+bonesAngles[curBoneId,curSample]);
curBoneId++;
foreach(Transform bone in h){
ReadWriteHierarchy(bone,record);
}
}