Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEditor;
- public class MenuAdditions
- {
- [MenuItem("Assets/Generate Animation")]
- static public void CreateAnimation()
- {
- string[] selected = Selection.assetGUIDs;
- //Get Frame Sprites
- List<Sprite> frames = new List<Sprite>();
- string containingFolder = null;
- string folderName = null;
- for (int i = 0; i < selected.Length; i++)
- {
- string path = AssetDatabase.GUIDToAssetPath(selected[i]);
- string[] slice = path.Split('/');
- if (string.IsNullOrEmpty(containingFolder))
- {
- containingFolder = path.Remove(path.LastIndexOf('/'));
- folderName = slice[slice.Length - 2];
- }
- Sprite loaded = AssetDatabase.LoadAssetAtPath<Sprite>(path);
- frames.Add(loaded);
- }
- //basic alphanumeric sort
- frames.Sort((s1, s2) => string.Compare(s1.name, s2.name, System.StringComparison.Ordinal));
- //generate clip
- AnimationClip clip = new AnimationClip();
- clip.frameRate = 12f;
- clip.wrapMode = WrapMode.Loop;
- EditorCurveBinding spriteBinding = new EditorCurveBinding();
- spriteBinding.type = typeof(SpriteRenderer);
- spriteBinding.path = "MainSprite";
- spriteBinding.propertyName = "m_Sprite";
- ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[frames.Count];
- for (int i = 0; i < frames.Count; i++)
- {
- spriteKeyFrames[i] = new ObjectReferenceKeyframe();
- spriteKeyFrames[i].time = (float)i / clip.frameRate;
- spriteKeyFrames[i].value = frames[i];
- }
- AnimationClipSettings settings = new AnimationClipSettings();
- settings.loopTime = true;
- AnimationUtility.SetAnimationClipSettings(clip, settings);
- AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames);
- AssetDatabase.CreateAsset(clip, containingFolder + "/" + folderName + ".anim");
- AssetDatabase.SaveAssets();
- AssetDatabase.Refresh();
- }
- }
Add Comment
Please, Sign In to add comment