private AnimationClip CreateAnimation(Anim a, Sprite[] Sprites, string enemyName, string pngPath) { AnimationClip clip = new AnimationClip(); float FramesPerSecond = 1000f / a.milliPerFrame; clip.frameRate = FramesPerSecond; EditorCurveBinding curveBinding = new EditorCurveBinding(); curveBinding.type = typeof(Image); curveBinding.path = ""; curveBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] keyframes = new ObjectReferenceKeyframe[Sprites.Length]; for (int i = 0; i < Sprites.Length; i++) { keyframes[i] = new ObjectReferenceKeyframe(); keyframes[i].time = i / FramesPerSecond; keyframes[i].value = Sprites[i]; } AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyframes); clip.wrapMode = WrapMode.Loop; string saveLocation = Path.Combine(Path.GetDirectoryName(pngPath), enemyName + a.name + ".anim"); AssetDatabase.CreateAsset(clip, saveLocation); return(clip); }
public static void GenerateClipImageLayer(ImportContext ctx, string childPath, List <Sprite> frameSprites) { foreach (var tag in ctx.file.frameTags) { AnimationClip clip = ctx.generatedClips[tag]; int duration = 0; // store accumulated duration of frames. on each loop iteration will have the start time of the cur frame, in ms var keyFrames = new ObjectReferenceKeyframe[tag.to - tag.from + 2]; for (int i = tag.from; i <= tag.to; ++i) { var aseFrame = ctx.file.frames[i]; keyFrames[i - tag.from] = new ObjectReferenceKeyframe { time = duration * 0.001f, // aesprite time is in ms, convert to seconds value = frameSprites[aseFrame.frameID] }; // add this frame's duration to calculate when the next frame starts duration += aseFrame.duration; } // Give the last frame an extra keyframe at the end of the animation to give that frame its duration keyFrames[keyFrames.Length - 1] = new ObjectReferenceKeyframe { time = duration * 0.001f - 1.0f / clip.frameRate, // clip duration in seconds, minus one frame's time value = frameSprites[tag.to] }; var binding = new EditorCurveBinding { path = childPath, type = typeof(SpriteRenderer), propertyName = "m_Sprite" }; AnimationUtility.SetObjectReferenceCurve(clip, binding, keyFrames); } }
/************************************************************************************************************************/ /// <summary>Creates and saves a new <see cref="AnimationClip"/> that plays the `sprites`.</summary> private static void CreateAnimation(string path, int frameRate, params Sprite[] sprites) { var clip = new AnimationClip { frameRate = frameRate, }; var spriteBinding = new EditorCurveBinding { type = typeof(SpriteRenderer), path = "", propertyName = "m_Sprite", }; var spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length]; for (int i = 0; i < sprites.Length; i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe { time = i / (float)frameRate, value = sprites[i] }; } AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames); AssetDatabase.CreateAsset(clip, path); }
private static void OnPostprocessAllAssets( string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { foreach (string asset in importedAssets) { Texture2D tex = AssetDatabase.LoadAssetAtPath <Texture2D>(asset); if (tex == null) { continue; } SpritesheetMetadata metadata = GetMetadata(asset); if (metadata == null) { Debug.Log("No spritesheet metadata at postprocess"); return; } int previousStart = 0; foreach (Animation anim in metadata.animations) { var binding = new EditorCurveBinding { type = typeof(SpriteRenderer), path = "", propertyName = "m_Sprite" }; Object[] sprites = AssetDatabase.LoadAllAssetRepresentationsAtPath(asset); int count = anim.end - previousStart; var keys = new ObjectReferenceKeyframe[count]; for (int i = 0; i < count; i++) { if (sprites.Length == 0) { break; } keys[i] = new ObjectReferenceKeyframe { time = (float)i / metadata.frameRate, value = sprites[i + previousStart], }; } var clip = new AnimationClip { frameRate = metadata.frameRate, }; AnimationUtility.SetObjectReferenceCurve(clip, binding, keys); DirectoryInfo parent = Directory.GetParent(asset); string path = Path.Combine(parent.ToString(), string.Format("{0}.anim", anim.name)); AssetDatabase.CreateAsset(clip, path); previousStart = anim.end; } } }
public static void AddSprites(AnimationClip clip, string path, int startIdx, int endIdx, float frameRate) { Sprite[] sprites = AssetToSpriteArray(path); EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; int numFrames = (endIdx - startIdx) + 1; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[numFrames]; for (int i = 0, idx = startIdx; idx <= endIdx; i++, idx++) { AnimationKeyTime akt = FrameToAnimationKey(i, frameRate); spriteKeyFrames[i] = new ObjectReferenceKeyframe(); spriteKeyFrames[i].time = akt.Time; spriteKeyFrames[i].value = sprites[idx]; } AnimationClipSettings clipSettings = new AnimationClipSettings(); clipSettings.loopTime = true; clipSettings.startTime = 0f; clipSettings.keepOriginalPositionY = true; AnimationUtility.SetAnimationClipSettings(clip, clipSettings); // This function sets clipSettings.stopTime AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames); }
static AnimationClip CreateSpriteAnimation(params Sprite[] sprites) { var animationClip = new AnimationClip { frameRate = 12 }; var animationClipSettings = new AnimationClipSettings { loopTime = true }; AnimationUtility.SetAnimationClipSettings(animationClip, animationClipSettings); var objectReferenceKeyframes = new ObjectReferenceKeyframe[sprites.Length]; for (var i = 0; i < objectReferenceKeyframes.Length; i++) { objectReferenceKeyframes[i] = new ObjectReferenceKeyframe { value = sprites[i], time = i / animationClip.frameRate }; } var editorCurveBinding = EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_Sprite"); AnimationUtility.SetObjectReferenceCurve(animationClip, editorCurveBinding, objectReferenceKeyframes); return(animationClip); }
static AnimationClip CreateAnimation(string savePath, Sprite[] sprites) { AnimationClip animClip = new AnimationClip(); AnimationClipSettings animClipSett = new AnimationClipSettings(); animClipSett.loopTime = true; AnimationUtility.SetAnimationClipSettings(animClip, animClipSett); animClip.frameRate = 12; // FPS EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length]; for (int i = 0; i < (sprites.Length); i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe(); spriteKeyFrames[i].time = i; spriteKeyFrames[i].value = sprites[i]; } AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames); AssetDatabase.CreateAsset(animClip, $"{AnimationSavePath}/{savePath}.anim"); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); return(animClip); }
private static AnimationClip CreateAnimationClip(SpritesheetData data, SpritesheetAnimationData animationData, UnityEngine.Object[] sprites) { AnimationClip clip = new AnimationClip { frameRate = animationData.frameRate }; Log($"Creating animation clip with frame rate {animationData.frameRate}, frame skip {animationData.frameSkip}, and {animationData.numFrames} total frames", LogLevel.Verbose); EditorCurveBinding spriteBinding = new EditorCurveBinding { type = typeof(SpriteRenderer), path = "", propertyName = "m_Sprite" }; var keyframes = new ObjectReferenceKeyframe[animationData.numFrames]; for (int i = 0; i < animationData.numFrames; i++) { int frameNum = i * (animationData.frameSkip + 1); keyframes[i] = new ObjectReferenceKeyframe { time = ((float)frameNum) / animationData.frameRate, value = sprites[i + animationData.startFrame] }; } AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, keyframes); return(clip); }
public static void GenerateClipImageLayer(ImportContext ctx, string childPath, List <Sprite> frameSprites) { foreach (var tag in ctx.file.frameTags) { AnimationClip clip = ctx.generatedClips[tag]; int time = 0; var keyFrames = new ObjectReferenceKeyframe[tag.to - tag.from + 2]; for (int i = tag.from; i <= tag.to; ++i) { var aseFrame = ctx.file.frames[i]; keyFrames[i - tag.from] = new ObjectReferenceKeyframe { time = time * 1e-3f, value = frameSprites[aseFrame.frameID] }; time += aseFrame.duration; } keyFrames[keyFrames.Length - 1] = new ObjectReferenceKeyframe { time = time * 1e-3f - 1.0f / clip.frameRate, value = frameSprites[tag.to] }; var binding = new EditorCurveBinding { path = childPath, type = typeof(SpriteRenderer), propertyName = "m_Sprite" }; AnimationUtility.SetObjectReferenceCurve(clip, binding, keyFrames); } }
static void GenerateSpriteSheet() { string[] cmdArgs = System.Environment.GetCommandLineArgs(); string characterName = cmdArgs[cmdArgs.Length - 1]; Debug.Log(characterName); SliceSprite(characterName); Sprite[] sprites = Resources.LoadAll <Sprite>(string.Concat("sprites/", characterName, "Animation/p1/", characterName)); // load all sprites in "assets/Resources/sprite" folder AnimationClip animClip = new AnimationClip(); animClip.frameRate = frameRate; EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length]; for (int i = 0; i < (sprites.Length); i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe(); spriteKeyFrames[i].time = i; spriteKeyFrames[i].value = sprites[i]; } AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames); AssetDatabase.CreateAsset(animClip, "assets/walk.anim"); AssetDatabase.SaveAssets(); }
void OnPostprocessSprites(Texture2D texture, Sprite[] sprites) { //PostProcesserUI popup = ScriptableObject.CreateInstance<PostProcesserUI>(); //popup.ShowUI(texture, sprites, assetImporter as TextureImporter); int wanted = sprites.Length; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[wanted]; for (int i = 0; i < wanted; i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe { time = i, value = sprites[i] }; } AnimationClip animClip = new AnimationClip { frameRate = 30 }; AnimationUtility.SetObjectReferenceCurve(animClip, new EditorCurveBinding() { path = "", propertyName = "sprite", type = typeof(SpriteRenderer) }, spriteKeyFrames); var resourcesSprites = Resources.LoadAll <Sprite>("Test2"); spriteKeyFrames[0].value = resourcesSprites[0]; //Loading from resources works fine!! AnimatorController ac = AnimatorController.CreateAnimatorControllerAtPathWithClip("assets/mycontroller.controller", animClip); AssetDatabase.CreateAsset(animClip, "assets/myanim.anim"); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }
/// <summary> /// Adjust the time a specific sprite should be displayed. /// </summary> /// <returns>An empty String if the renaming was succesfull, otherwise an error specific message.</returns> string SetSpriteDisplayTime() { string notification; if (spriteKeyFrames[viewIndex - 1].showingTime >= 0.01f) { float oldTime = (spriteKeyFrames[viewIndex].frame.time - spriteKeyFrames[viewIndex - 1].frame.time) * asset.frameRate; oldTime /= 100; float diff = spriteKeyFrames[viewIndex - 1].showingTime - oldTime; for (int i = viewIndex; i < spriteKeyFrames.Count; i++) { ObjectReferenceKeyframe currentFrame = spriteKeyFrames[i].frame; currentFrame.time = (currentFrame.time * asset.frameRate) + (diff * 100); currentFrame.time /= asset.frameRate; spriteKeyFrames[i].frame = currentFrame; } notification = "Adjustet Times succesfuly, dont forget to save your Animation!"; } else { notification = "Value must be bigger or equal than 0,01!"; } return(notification); }
private static AnimationClip CreateSpriteSheetAnimation(List <string> frameNames, string path) { AnimationClip clip = new AnimationClip(); ObjectReferenceKeyframe[] frames = new ObjectReferenceKeyframe[frameNames.Count]; for (int i = 0; i < frameNames.Count; i++) { frames[i].time = (float)i * (1.0f / (float)animationFPS); frames[i].value = AssetDatabase.LoadAssetAtPath <Sprite>(frameNames[i]); } var curveBinding = new EditorCurveBinding(); curveBinding.type = typeof(Image); curveBinding.path = ""; curveBinding.propertyName = "m_Sprite"; AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, frames); var settings = AnimationUtility.GetAnimationClipSettings(clip); settings.loopTime = true; AnimationUtility.SetAnimationClipSettings(clip, settings); clip.wrapMode = WrapMode.Loop; AssetDatabase.CreateAsset(clip, path); return(clip); }
private void BuildSpriteChangeCurve(ref AnimationClip clip, KeyValuePair <string, List <SpriteChangeKey> > timeline) { // First you need to create Editor Curve Binding EditorCurveBinding curveBinding = new EditorCurveBinding(); // I want to change the sprites of the sprite renderer, so I put the typeof(SpriteRenderer) as the binding type. curveBinding.type = typeof(SpriteRenderer); // Regular path to the GameObject that will be changed curveBinding.path = timeline.Key; // This is the property name to change the sprite of a sprite renderer curveBinding.propertyName = "m_Sprite"; // An array to hold the object keyframes ObjectReferenceKeyframe[] keyFrames = new ObjectReferenceKeyframe[timeline.Value.Count]; int i = 0; foreach (var key in timeline.Value) { keyFrames[i] = new ObjectReferenceKeyframe(); // set the time keyFrames[i].time = key.Time; // set reference for the sprite you want keyFrames[i].value = key.Sprite; i++; } AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyFrames); }
/************************************************************************************************************************/ /// <summary>Creates and saves a new <see cref="AnimationClip"/> that plays the `sprites`.</summary> private static void CreateAnimation(string path, params Sprite[] sprites) { var frameRate = AnimancerSettings.NewAnimationFrameRate.floatValue; var clip = new AnimationClip { frameRate = frameRate, }; var spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length]; for (int i = 0; i < spriteKeyFrames.Length; i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe { time = i / (float)frameRate, value = sprites[i] }; } var spriteBinding = EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_Sprite"); AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames); AssetDatabase.CreateAsset(clip, path); }
private static AnimationClip CreateAnimationClip(SpriteSheetAnimationData spriteAnimation) { AnimationClip clip = UnityEditor.Animations.AnimatorController.AllocateAnimatorClip(spriteAnimation.name); clip.frameRate = spriteAnimation.framesPerSecond; clip.wrapMode = WrapMode.Loop; EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[spriteAnimation.sprites.Length]; for (int i = 0; i < (spriteAnimation.sprites.Length); i++) { //Added security check: if (float.IsNaN(spriteAnimation.sprites[i].pivot.x) || float.IsNaN(spriteAnimation.sprites[i].pivot.y)) { Debug.Log("There is a problem with sprite: " + spriteAnimation.sprites[i].name + " (pivot is NaN)"); } spriteKeyFrames[i] = new ObjectReferenceKeyframe(); spriteKeyFrames[i].time = i / clip.frameRate; spriteKeyFrames[i].value = spriteAnimation.sprites[i]; } AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames); return(clip); }
private void CreateAnimationClipFile(DirectionAnimation directionAnimation, Direction direction, string targetFolder) { var name = direction + "_" + directionAnimation.name; AnimationClip animClip = new AnimationClip(); animClip.frameRate = directionAnimation.framerate; // FPS animClip.wrapMode = WrapMode.Loop; EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[directionAnimation.frames]; for (int i = 0; i < directionAnimation.frames; i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe(); spriteKeyFrames[i].time = i; spriteKeyFrames[i].value = newSprites[currentAnimIndex + i]; } currentAnimIndex += directionAnimation.frames; AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames); AssetDatabase.CreateAsset(animClip, targetFolder + "/" + name + ".anim"); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log("Trying to create : " + targetFolder + "/" + name + ".anim"); }
/// <summary> /// 创建图片的动画 /// </summary> /// <param name="type">1.UI图片 2.SpriteRenderer</param> /// <param name="itemPicTex"></param> /// <param name="numberForS">1秒多少张</param> public static void CreateAnimForTex(int type, Texture2D itemPicTex, string animPath, int numberForS) { AnimationClip clip = new AnimationClip(); //设置帧率为30 clip.frameRate = 30; //属性参数 EditorCurveBinding curveBinding = new EditorCurveBinding(); switch (type) { case 1: curveBinding.type = typeof(SpriteRenderer); break; case 2: curveBinding.type = typeof(Image); break; } curveBinding.path = ""; curveBinding.propertyName = "m_Sprite"; //帧数相关 ObjectReferenceKeyframe[] keyFrames = null; string path = AssetDatabase.GetAssetPath(itemPicTex); Object[] objs = AssetDatabase.LoadAllAssetsAtPath(path); keyFrames = new ObjectReferenceKeyframe[objs.Length]; //动画长度是按秒为单位,1/10就表示1秒切10张图片,根据项目的情况可以自己调节 float frameTime = 1 / (float)numberForS; int i = 0; objs.ToList().ForEach(obj => { if (obj as Sprite != null) { Sprite itemSprite = obj as Sprite; keyFrames[i] = new ObjectReferenceKeyframe(); keyFrames[i].time = frameTime * i; keyFrames[i].value = itemSprite; i++; } }); //最后结束再加一个第一帧 keyFrames[i] = new ObjectReferenceKeyframe(); keyFrames[i].time = frameTime * i; keyFrames[i].value = keyFrames[0].value; //设置idle文件为循环动画 AnimationClipSettings clipSetting = AnimationUtility.GetAnimationClipSettings(clip); clipSetting.loopTime = !clip.isLooping; AnimationUtility.SetAnimationClipSettings(clip, clipSetting); //设置参数 AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyFrames); AssetDatabase.CreateAsset(clip, animPath + "/" + itemPicTex.name + ".anim"); AssetDatabase.SaveAssets(); }
private void CreateAnim(Sprite[] sprites, int dir, int index) { Debug.Log(sprites.Length); int startIndex = dir * sprites.Length / cnt; AnimationClip animClip = new AnimationClip(); animClip.frameRate = 60; // FPS EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length / cnt]; for (int i = 0; i < (sprites.Length) / cnt; i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe(); spriteKeyFrames[i].time = i * (1.0f / animClip.frameRate); spriteKeyFrames[i].value = sprites[startIndex + i]; } AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames); AnimationClipSettings animClipSett = new AnimationClipSettings(); animClipSett.loopTime = true; animClipSett.stopTime = (1.0f / animClip.frameRate) * sprites.Length / cnt; AnimationUtility.SetAnimationClipSettings(animClip, animClipSett); AssetDatabase.CreateAsset(animClip, animationFolderPath + "/" + unitName + "/" + folderName[index] + "/" + (dir / 10).ToString() + (dir % 10).ToString() + "_" + types[index] + "_" + fileName + ".anim"); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); animOVR[(dir / 10).ToString() + (dir % 10).ToString() + "_" + types[index] + "_" + "sample"] = animClip; }
private static AnimationClip GenerateAnimation(List <Sprite> sprites, int frameRate, bool isLooping, string name) { var animationClip = new AnimationClip() { name = name, frameRate = frameRate }; if (isLooping) { var animationClipSettings = AnimationUtility.GetAnimationClipSettings(animationClip); animationClipSettings.loopTime = true; AnimationUtility.SetAnimationClipSettings(animationClip, animationClipSettings); } var editorCurveBinding = new EditorCurveBinding() { type = typeof(SpriteRenderer), propertyName = "m_Sprite", }; var timeStep = 1f / frameRate; var keyFrames = new ObjectReferenceKeyframe[sprites.Count]; for (var index = 0; index < sprites.Count; index++) { keyFrames[index] = new ObjectReferenceKeyframe() { time = timeStep * index, value = sprites[index], }; } AnimationUtility.SetObjectReferenceCurve(animationClip, editorCurveBinding, keyFrames); return(animationClip); }
static void CreateAnimationClip(AnimationClip animClip, SMWAnimation animSettings) { Sprite[] sprites = animSettings.sprites; int animationLength = animSettings.keyFrames; float singleFrameTime = 1.0f / animSettings.framesPerSecond; // Debug.Log("Create Animation: " + animClip.name + " " + " Spritearray = " + sprites.Length + ", Animation length = " + animationLength + ", single frame time = " + singleFrameTime ); // First you need to create e Editor Curve Binding EditorCurveBinding curveBinding = new EditorCurveBinding(); // I want to change the sprites of the sprite renderer, so I put the typeof(SpriteRenderer) as the binding type. curveBinding.type = typeof(SpriteRenderer); // Regular path to the gameobject that will be changed (empty string means root) curveBinding.path = ""; // This is the property name to change the sprite of a sprite renderer curveBinding.propertyName = "m_Sprite"; // curveBinding.propertyName = " // An array to hold the object keyframes ObjectReferenceKeyframe[] keyFrames = new ObjectReferenceKeyframe[animationLength]; for (int i = 0; i < sprites.Length; i++) { keyFrames[i] = new ObjectReferenceKeyframe(); // set the time keyFrames[i].time = i * singleFrameTime; // TODO important // set reference for the sprite you want keyFrames[i].value = sprites[i]; } AnimationUtility.SetObjectReferenceCurve(animClip, curveBinding, keyFrames); }
private void SaveAnimation() { string savingPath = EditorUtility.SaveFilePanelInProject("保存动画片段", SelectedSpritesList[0].name + ".anim", "anim", "Select Path To Save AnimationClip", savingPathBuffer); if (savingPath.Length > 0) { savingPathBuffer = savingPath; AnimationClip clip = new AnimationClip(); EditorCurveBinding curveBinding = new EditorCurveBinding(); curveBinding.type = typeof(SpriteRenderer); curveBinding.path = ""; curveBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] keyFrames = new ObjectReferenceKeyframe[SelectedSpritesList.Count]; float frameTime = 1f / frameCount; for (int i = 0; i < SelectedSpritesList.Count; i++) { keyFrames[i] = new ObjectReferenceKeyframe(); keyFrames[i].time = frameTime * i; keyFrames[i].value = SelectedSpritesList[i]; } clip.frameRate = frameCount; AnimationClipSettings clipSetting = AnimationUtility.GetAnimationClipSettings(clip); clipSetting.loopTime = isAnimationLoop; AnimationUtility.SetAnimationClipSettings(clip, clipSetting); AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyFrames); AssetDatabase.CreateAsset(clip, savingPath); AssetDatabase.SaveAssets(); Debug.Log(savingPath + "创建成功"); } }
AnimationClip createAnimationClip(List <Sprite> sources, string animName, bool isLoop = false) { sources.Sort((x, y) => { return(x.name.CompareTo(y.name)); }); float samples = Samples; AnimationClip animClip = new AnimationClip(); animClip.name = animName; animClip.frameRate = samples; // FPS= EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sources.Count]; for (int i = 0; i < (sources.Count); i++) { spriteKeyFrames[i] = new ObjectReferenceKeyframe(); spriteKeyFrames[i].time = i * (1 / (float)samples); spriteKeyFrames[i].value = sources[i]; } AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames); var settings = AnimationUtility.GetAnimationClipSettings(animClip); settings.loopTime = isLoop; settings.stopTime = sources.Count * (1 / (float)samples); AnimationUtility.SetAnimationClipSettings(animClip, settings); return(animClip); }
public void CreateClip() { print(GetRelativeName(Path, false)); AnimClip = new AnimationClip(); AnimClip.name = Name; AnimClip.frameRate = FPS; if (Loop) { AnimClip.wrapMode = WrapMode.Loop; } else { AnimClip.wrapMode = WrapMode.Default; } SpriteBinding = new EditorCurveBinding(); SpriteBinding.type = typeof(SpriteRenderer); SpriteBinding.path = GetRelativeName(Path, false); SpriteBinding.propertyName = "Sprite Renderer"; SpriteKeyFrames = new ObjectReferenceKeyframe[Sprites.Count]; for (int i = 0; i < Sprites.Count; i++) { SpriteKeyFrames [i] = new ObjectReferenceKeyframe(); SpriteKeyFrames [i].time = i; SpriteKeyFrames [i].value = Sprites [i]; } AnimationUtility.SetObjectReferenceCurve(AnimClip, SpriteBinding, SpriteKeyFrames); AssetDatabase.CreateAsset(AnimClip, "assets/Animations/" + Name + ".anim"); }
private static ObjectReferenceKeyframe CreateKeyframe(float time, Sprite sprite) { ObjectReferenceKeyframe keyframe = new ObjectReferenceKeyframe(); keyframe.time = time; keyframe.value = sprite; return(keyframe); }
/// <summary> /// Adds a new Frame to this animation. /// </summary> void AddFrame() { ObjectReferenceKeyframe keyFrame = new ObjectReferenceKeyframe(); keyFrame.time = spriteKeyFrames.Count / asset.frameRate; spriteKeyFrames.Add(new KeyFrame(keyFrame, defaultSpriteTime)); viewIndex = spriteKeyFrames.Count; }
private static ObjectReferenceKeyframe CreateKeyFrame(float animTimePos, Sprite sprite) { var keyFrame = new ObjectReferenceKeyframe(); keyFrame.time = animTimePos; keyFrame.value = sprite; return(keyFrame); }
// Actually change asset configurations. public void Modify(UnityEngine.Object[] assets, List <AssetReference> group) { var animClip = assets.Where(a => a is AnimationClip).FirstOrDefault() as AnimationClip; var spriteAssets = group.Where(a => a.importerType == typeof(TextureImporter)).OrderBy(a => a.fileName); List <Sprite> sprites = new List <Sprite>(); foreach (var a in spriteAssets) { foreach (var o in a.allData) { var s = o as Sprite; if (s != null) { sprites.Add(s); } } } animClip.frameRate = m_frameRate; var setting = AnimationUtility.GetAnimationClipSettings(animClip); setting.loopTime = m_loopTime; AnimationUtility.SetAnimationClipSettings(animClip, setting); EditorCurveBinding spriteBinding = new EditorCurveBinding(); spriteBinding.type = typeof(SpriteRenderer); spriteBinding.path = ""; spriteBinding.propertyName = "m_Sprite"; EditorCurveBinding uiBinding = new EditorCurveBinding(); uiBinding.type = typeof(UnityEngine.UI.Image); uiBinding.path = ""; uiBinding.propertyName = "m_Sprite"; ObjectReferenceKeyframe[] keyframes = new ObjectReferenceKeyframe[sprites.Count]; for (int i = 0; i < sprites.Count; i++) { keyframes[i] = new ObjectReferenceKeyframe(); keyframes[i].time = i / (float)m_frameRate; keyframes[i].value = sprites[i]; } if (m_animType == AnimationType.SpriteAnimation) { AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, keyframes); AnimationUtility.SetObjectReferenceCurve(animClip, uiBinding, null); } else { AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, null); AnimationUtility.SetObjectReferenceCurve(animClip, uiBinding, keyframes); } }
public ObjectReferenceKeyframe ToObjectReferenceKeyframe() { var keyframe = new ObjectReferenceKeyframe(); keyframe.time = time; keyframe.value = (UnityEngine.Object)value; return(keyframe); }
/// <summary> /// Set the sprite for this keyframe. /// </summary> void SetSprite() { ObjectReferenceKeyframe frame = spriteKeyFrames[viewIndex - 1].frame; frame.value = EditorGUILayout.ObjectField("Sprite", frame.value, typeof(Sprite), false) as Sprite; spriteKeyFrames[viewIndex - 1].frame = frame; }