Accessing and Changing Sprite Bone Depth via Script in Unity

Accessing and Changing Sprite Bone Depth via Script in Unity 


Sprites in Unity can be rigged with bones and animated just like 3D models. You may need to access and modify depth values for sprite bones from code for certain use cases. Here is how to do it:


First, get the SpriteRenderer component from your sprite GameObject. Then access its boneTransforms array which contains all the bones:


```

SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();

Transform[] boneTransforms = spriteRenderer.boneTransforms;

```


This gives you an array of Transform components for each bone. To change the depth, get the renderer of the bone and modify its order in layer:


```

// Increase depth of first bone 

SpriteRenderer boneRenderer = boneTransforms[0].GetComponent<SpriteRenderer>();

boneRenderer.sortingOrder += 1;

```


You can also sort all bones by depth:


```

// Sort bone array by depth

Array.Sort(boneTransforms, (a, b) => {

  return a.GetComponent<SpriteRenderer>().sortingOrder - b.GetComponent<SpriteRenderer>().sortingOrder;

});

```


Finally, to access the current depth order: 


```

// Print depth order

foreach(Transform bone in boneTransforms) {

  SpriteRenderer renderer = bone.GetComponent<SpriteRenderer>();

  print(renderer.sortingOrder); 

}

```


This allows you to fully access and modify the depth values of sprite bones from code in Unity. You can animate depth over time or implement depth sorting logic for complex sprite animations.