In general, its how pooling works. But there are some triks.
For example, you can create a simple script, which will cahe its transform state on Awake(), and then restore every time when OnEnable called.
This can be a bit heavy to have additional scripts on every bone. Som better solution is to have another, only one, which will iterate all root transform`s childs.
public class RestoreTransforms : MonoBehaviour
private List<Transform> _transforms = new List<Transform>();
private List<Vector3> _positions = new List<Vector3>();
private List<Quaternion> _rotations = new List<Quaternion>();
private void Awake()
var allTransforms = GetComponentsInChildren<Transform>();
foreach(var t in allTransforms)
private void OnEnable()
for (int i = 0; i < _transforms.Count; ++i)
_transforms[i].position = _positions[i];
_transforms[i].localRotation = _rotations[i];