Editor環境でAnimatorからAnimationClipを取得。LayerやAvaterMaskの情報も

環境

Unity2022.2.2f1

概要

Editor環境でAnimatorからAnimationClipを取得します。所属するLayerやAvaterMaskの情報も取得します。

runtimeAnimatorControllerをAnimatorControllerに変換することが重要でした。

コード

var animController = _animator.runtimeAnimatorController as AnimatorController;
for(int i = 0; i < animController.layers.Length; i++)
{
    var layer = animController.layers[i];
    var mask = layer.avatarMask;
    if(mask != null)
    {
        for(int m = 0; m < mask.transformCount; m++)
        {
            if(mask.GetTransformActive(m) == true)
            {
                var path = mask.GetTransformPath(m);
                if(string.IsNullOrEmpty(path) == true)
                    continue;
                var trans = _targetObj.transform.Find(path);
                Debug.Log($"avatarMask:{mask.name} transform:{trans.name} layer:{layer.name}");
            }
        }
    }
    foreach(var state in layer.stateMachine.states)
    {
        var animClip = state.state.motion as AnimationClip;
        Debug.Log($"animClip:{animClip.name} layer:{layer.name}");
    }
}