public void ExtractSkeleton(Transform[] bones) { ArrayExtensions.Clear(ref Bones); Action <Transform, Bone> recursion = null; recursion = new Action <Transform, Bone>((transform, parent) => { if (System.Array.Find(bones, x => x == transform)) { Bone bone = new Bone(this, transform, Bones.Length); ArrayExtensions.Add(ref Bones, bone); if (parent != null) { bone.Parent = parent.Index; bone.ComputeLength(); ArrayExtensions.Add(ref parent.Childs, bone.Index); } parent = bone; } for (int i = 0; i < transform.childCount; i++) { recursion(transform.GetChild(i), parent); } }); recursion(GetRoot(), null); }