Guest User

Untitled

a guest
Jan 16th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5.  
  6. public class MenuAdditions
  7. {
  8. [MenuItem("Assets/Generate Animation")]
  9. static public void CreateAnimation()
  10. {
  11. string[] selected = Selection.assetGUIDs;
  12.  
  13. //Get Frame Sprites
  14. List<Sprite> frames = new List<Sprite>();
  15. string containingFolder = null;
  16. string folderName = null;
  17. for (int i = 0; i < selected.Length; i++)
  18. {
  19. string path = AssetDatabase.GUIDToAssetPath(selected[i]);
  20. string[] slice = path.Split('/');
  21. if (string.IsNullOrEmpty(containingFolder))
  22. {
  23. containingFolder = path.Remove(path.LastIndexOf('/'));
  24. folderName = slice[slice.Length - 2];
  25. }
  26. Sprite loaded = AssetDatabase.LoadAssetAtPath<Sprite>(path);
  27. frames.Add(loaded);
  28. }
  29.  
  30. //basic alphanumeric sort
  31. frames.Sort((s1, s2) => string.Compare(s1.name, s2.name, System.StringComparison.Ordinal));
  32.  
  33. //generate clip
  34. AnimationClip clip = new AnimationClip();
  35.  
  36. clip.frameRate = 12f;
  37. clip.wrapMode = WrapMode.Loop;
  38.  
  39. EditorCurveBinding spriteBinding = new EditorCurveBinding();
  40. spriteBinding.type = typeof(SpriteRenderer);
  41. spriteBinding.path = "MainSprite";
  42. spriteBinding.propertyName = "m_Sprite";
  43.  
  44. ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[frames.Count];
  45. for (int i = 0; i < frames.Count; i++)
  46. {
  47. spriteKeyFrames[i] = new ObjectReferenceKeyframe();
  48. spriteKeyFrames[i].time = (float)i / clip.frameRate;
  49. spriteKeyFrames[i].value = frames[i];
  50. }
  51.  
  52. AnimationClipSettings settings = new AnimationClipSettings();
  53. settings.loopTime = true;
  54.  
  55. AnimationUtility.SetAnimationClipSettings(clip, settings);
  56. AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames);
  57. AssetDatabase.CreateAsset(clip, containingFolder + "/" + folderName + ".anim");
  58.  
  59. AssetDatabase.SaveAssets();
  60. AssetDatabase.Refresh();
  61. }
  62. }
Add Comment
Please, Sign In to add comment