概要
コンポーネントのコンテキストメニューから Animator の操作対象に設定されているか確認する Editor 拡張です。
詳細
親オブジェクトに存在する Animator から AnimationClip, EditorCurveBinding にアクセスし、対象へのパス、型から操作対象になっているか確認します。
コード全文
[MenuItem( "CONTEXT/Component/Animator Reference Search" )]
private static void AnimatorReferenceSearch( MenuCommand menuCommand )
{
var component = menuCommand.context as Component;
var animators = component.GetComponentsInParent<Animator>();
foreach( var animator in animators )
{
var path = GetPath( animator.transform, component.transform );
foreach( var clip in animator.runtimeAnimatorController.animationClips )
{
foreach( var binding in AnimationUtility.GetCurveBindings( clip ) )
{
if( path == binding.path && component.GetType() == binding.type )
{
Selection.activeGameObject = animators.Select( a => a.gameObject ).ToArray().First();
EditorGUIUtility.PingObject( Selection.activeGameObject );
return;
}
}
}
}
string GetPath( Transform animatorTransform, Transform componentTransform )
{
if( animatorTransform == componentTransform )
{
return string.Empty;
}
var path = componentTransform.name;
var parent = componentTransform.parent;
while( parent != animatorTransform )
{
path = parent.name + "/" + path;
parent = parent.parent;
}
return path;
}
}