using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
namespace WX
{
/// <summary>
/// 动画工具
/// </summary>
public class AnimationUtility
{
[MenuItem("Assets/EditorTools/GenerateTextureAnimation")]
private static void GenerateTextureAnimation()
{
string outputFodler = "Assets/Animations";
if (!Directory.Exists(outputFodler))
{
Directory.CreateDirectory(outputFodler);
}
CreateTextureAnimation(Selection.GetFiltered<Texture2D>(SelectionMode.DeepAssets), outputFodler + "/anim.anim");
}
private static void CreateTextureAnimation(IList<Texture2D> frames, string outputPath)
{
AnimationClip clip = new AnimationClip();
var curveBinding = new EditorCurveBinding();
curveBinding.type = typeof(RawImage);
curveBinding.path = "";
curveBinding.propertyName = "m_Texture";
frames = frames.OrderBy(i => i.name).ToList();
int count = frames.Count;
float time = 1f / count;
clip.frameRate = count;
ObjectReferenceKeyframe[] objectReferenceKeyframes = new ObjectReferenceKeyframe[count];
for (int i = 0; i < count; i++)
{
ObjectReferenceKeyframe keyframe = new ObjectReferenceKeyframe();
keyframe.time = time * i;
keyframe.value = frames[i];
objectReferenceKeyframes[i] = keyframe;
}
UnityEditor.AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, objectReferenceKeyframes);
AssetDatabase.CreateAsset(clip, outputPath);
AssetDatabase.SaveAssets();
}
}
}
在Project面板中选择图片文件夹,点击右键,在弹出的菜单中点击EditorTools/GenerateTextureAnimation命令
在编辑器中通过命令生成动画文件
执行完成后,即可生成动画文件
生成的动画
双击生成的动画文件,可以预览效果
预览效果