72 lines
3.4 KiB
C#
72 lines
3.4 KiB
C#
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream.FrameAnimation.Editor
|
|
{
|
|
[CustomEditor(typeof(FrameClip))]
|
|
public sealed class FrameClipEditor : UnityEditor.Editor
|
|
{
|
|
public override void OnInspectorGUI()
|
|
{
|
|
var clip = (FrameClip)target;
|
|
var owners = FrameAnimationAssetReferenceIndex.FindGraphsReferencing(clip);
|
|
var kind = clip.IsImported
|
|
? "Graph Imported FrameClip"
|
|
: clip.HasStandaloneImportSource ? "Source-linked External FrameClip" : "Manual FrameClip";
|
|
EditorGUILayout.LabelField(kind, EditorStyles.boldLabel);
|
|
using (new EditorGUI.DisabledScope(true))
|
|
{
|
|
EditorGUILayout.TextField("ID", clip.Id);
|
|
EditorGUILayout.TextField("Display Name", clip.DisplayName);
|
|
EditorGUILayout.FloatField("Speed", clip.Speed);
|
|
EditorGUILayout.EnumPopup("Default End", clip.DefaultEndBehavior);
|
|
EditorGUILayout.IntField("Frames", clip.FrameCount);
|
|
EditorGUILayout.LongField("Total Duration Ms", clip.TotalDurationMs);
|
|
EditorGUILayout.TextField("Storage", AssetDatabase.IsSubAsset(clip) ? "Graph sub-asset" : "External .asset");
|
|
EditorGUILayout.TextField("Source Tag", clip.ImportInfo?.SourceTagName ?? string.Empty);
|
|
EditorGUILayout.Toggle("Missing", clip.ImportInfo?.IsMissingFromSource ?? false);
|
|
EditorGUILayout.ObjectField("Standalone Texture", clip.StandaloneImportSource?.Texture, typeof(Texture2D), false);
|
|
EditorGUILayout.ObjectField("Standalone JSON", clip.StandaloneImportSource?.AsepriteJson, typeof(TextAsset), false);
|
|
}
|
|
if (!AssetDatabase.IsSubAsset(clip) && owners.Count > 1)
|
|
{
|
|
EditorGUILayout.HelpBox(
|
|
"该外部 Manual Clip 被多个 Graph 共享:" + string.Join(", ", owners.Select(graph => graph.name)),
|
|
MessageType.Warning);
|
|
}
|
|
EditorGUILayout.HelpBox(
|
|
AssetDatabase.IsSubAsset(clip)
|
|
? "Graph sub-asset 的 Clip 数据请在 Frame Animation Graph Editor 中编辑。"
|
|
: "双击资产或使用下方按钮,在独立 Frame Clip Editor 中编辑。",
|
|
MessageType.Info);
|
|
if (!AssetDatabase.IsSubAsset(clip) && GUILayout.Button("Open Frame Clip Editor"))
|
|
{
|
|
FrameClipEditorWindow.Open(clip);
|
|
}
|
|
if (owners.Count == 0)
|
|
{
|
|
EditorGUILayout.HelpBox("当前没有 FrameAnimationGraph 引用该 Clip。", MessageType.Info);
|
|
}
|
|
else if (owners.Count == 1)
|
|
{
|
|
if (GUILayout.Button("Open Referencing Graph"))
|
|
{
|
|
FrameAnimationGraphEditorWindow.Open(owners[0]);
|
|
}
|
|
}
|
|
else if (GUILayout.Button("Choose Referencing Graph"))
|
|
{
|
|
var menu = new GenericMenu();
|
|
foreach (var owner in owners)
|
|
{
|
|
var captured = owner;
|
|
menu.AddItem(new GUIContent(owner.name), false,
|
|
() => FrameAnimationGraphEditorWindow.Open(captured));
|
|
}
|
|
menu.ShowAsContext();
|
|
}
|
|
}
|
|
}
|
|
}
|