popcorn/ReferenceViewer/Editor/AssetData/AnimationControllerAssetDat...

54 lines
1.8 KiB
C#
Executable File

using System.Linq;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
namespace ReferenceViewer
{
[System.Serializable]
public class AnimationControllerAssetData : AssetData
{
public new const string extension = ".controller";
private readonly AnimatorController animatorController;
public AnimationControllerAssetData(string assetPath) : base(assetPath)
{
animatorController =
AssetDatabase.LoadAssetAtPath(assetPath, typeof(AnimatorController)) as AnimatorController;
}
public override void AddAssetData(Object obj)
{
var guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(obj));
reference.Add(guid);
foreach (var animationClip in animatorController.animationClips)
{
AddReference(animationClip);
}
foreach (var animatorControllerLayer in animatorController.layers)
{
AddReferenceForStateMachine(animatorControllerLayer.stateMachine);
}
}
private void AddReferenceForStateMachine(AnimatorStateMachine stateMachine)
{
foreach (var stateMachineBehaviour in stateMachine.states
.SelectMany(childAnimatorState => childAnimatorState.state.behaviours))
{
AddReference(stateMachineBehaviour);
}
foreach (var stateMachineBehaviour in stateMachine.behaviours)
{
AddReference(stateMachineBehaviour);
}
foreach (var childAnimatorStateMachine in stateMachine.stateMachines)
{
AddReferenceForStateMachine(childAnimatorStateMachine.stateMachine);
}
}
}
}