原文链接:http://answers.unity3d.com/questions/8172/how-to-add-new-curves-or-animation-events-to-an-im.html

unity4.3版本号

方法1:

You can use an editor script that copies over the curves from the original imported Animation Clip into the duplicated Animation Clip.

Here is such an editor script.

  • Place it in a folder called Editor, located somewhere inside the Assets folder.
  • The script assumes that you have already made a duplicate of the imported clip and called it the same name but with a *copy postfix. For example, if you have an imported clip called MyAnimation,
    it will search for *MyAnimation_copy*.
  • Select the original imported Animation Clip in the Project View.
  • You can now use the menu Assets -> Transfer Clip Curves to Copy

And the script:


  1. using UnityEditor;
  2. using UnityEngine;
  3. using System.Collections;
  4. public class CurvesTransferer {
  5. const string duplicatePostfix = "_copy";
  6. [MenuItem ("Assets/Transfer Clip Curves to Copy")]
  7. static void CopyCurvesToDuplicate () {
  8. // Get selected AnimationClip
  9. AnimationClip imported = Selection.activeObject as AnimationClip;
  10. if (imported == null) {
  11. Debug.Log("Selected object is not an AnimationClip");
  12. return;
  13. }
  14. // Find path of copy
  15. string importedPath = AssetDatabase.GetAssetPath(imported);
  16. string copyPath = importedPath.Substring(0, importedPath.LastIndexOf("/"));
  17. copyPath += "/" + imported.name + duplicatePostfix + ".anim";
  18. // Get copy AnimationClip
  19. AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath, typeof(AnimationClip)) as AnimationClip;
  20. if (copy == null) {
  21. Debug.Log("No copy found at "+copyPath);
  22. return;
  23. }
  24. // Copy curves from imported to copy
  25. AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(imported, true);
  26. for (int i=0; i<curveDatas.Length; i++) {
  27. AnimationUtility.SetEditorCurve(
  28. copy,
  29. curveDatas[i].path,
  30. curveDatas[i].type,
  31. curveDatas[i].propertyName,
  32. curveDatas[i].curve
  33. );
  34. }
  35. Debug.Log("Copying curves into "+copy.name+" is done");
  36. }
  37. }

方法2:

There is more simple variant. This script creates a new animation file itself and makes all copying operations.


  1. using UnityEditor;
  2. using UnityEngine;
  3. public class CurvesTransferer
  4. {
  5. const string duplicatePostfix = "_copy";
  6. static void CopyClip(string importedPath, string copyPath)
  7. {
  8. AnimationClip src = AssetDatabase.LoadAssetAtPath(importedPath, typeof(AnimationClip)) as AnimationClip;
  9. AnimationClip newClip = new AnimationClip();
  10. newClip.name = src.name + duplicatePostfix;
  11. AssetDatabase.CreateAsset(newClip, copyPath);
  12. AssetDatabase.Refresh();
  13. }
  14. [MenuItem("Assets/Transfer Clip Curves to Copy")]
  15. static void CopyCurvesToDuplicate()
  16. {
  17. // Get selected AnimationClip
  18. AnimationClip imported = Selection.activeObject as AnimationClip;
  19. if (imported == null)
  20. {
  21. Debug.Log("Selected object is not an AnimationClip");
  22. return;
  23. }
  24. // Find path of copy
  25. string importedPath = AssetDatabase.GetAssetPath(imported);
  26. string copyPath = importedPath.Substring(0, importedPath.LastIndexOf("/"));
  27. copyPath += "/" + imported.name + duplicatePostfix + ".anim";
  28. CopyClip(importedPath, copyPath);
  29. AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath, typeof(AnimationClip)) as AnimationClip;
  30. if (copy == null)
  31. {
  32. Debug.Log("No copy found at " + copyPath);
  33. return;
  34. }
  35. // Copy curves from imported to copy
  36. AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(imported, true);
  37. for (int i = 0; i < curveDatas.Length; i++)
  38. {
  39. AnimationUtility.SetEditorCurve(
  40. copy,
  41. curveDatas[i].path,
  42. curveDatas[i].type,
  43. curveDatas[i].propertyName,
  44. curveDatas[i].curve
  45. );
  46. }
  47. Debug.Log("Copying curves into " + copy.name + " is done");
  48. }
  49. }

方法3:

Guys, I loved this script so much, I went ahead and added a couple of features.

Here is a modified version of MaDDoX's edit that includes logic for automatically placing the animations into folders.

It first uses an animations folder to contain them all and then if the animation came from an FBX file, it will use the FBX's name to create a subfolder for those animations. Hopefully, this helps y'all keep things organized.



  1. using UnityEditor;
  2. using UnityEngine;
  3. using System.IO;
  4. using System.Collections;
  5. public class MultipleCurvesTransferer {
  6. const string duplicatePostfix = "Edit";
  7. const string animationFolder = "Animations";
  8. static void CopyClip(string importedPath, string copyPath) {
  9. AnimationClip src = AssetDatabase.LoadAssetAtPath(importedPath, typeof(AnimationClip)) as AnimationClip;
  10. AnimationClip newClip = new AnimationClip();
  11. newClip.name = src.name + duplicatePostfix;
  12. AssetDatabase.CreateAsset(newClip, copyPath);
  13. AssetDatabase.Refresh();
  14. }
  15. [MenuItem("Assets/Transfer Multiple Clips Curves to Copy")]
  16. static void CopyCurvesToDuplicate()
  17. {
  18. // Get selected AnimationClip
  19. Object[] imported = Selection.GetFiltered(typeof(AnimationClip), SelectionMode.Unfiltered);
  20. if (imported.Length == 0)
  21. {
  22. Debug.LogWarning("Either no objects were selected or the objects selected were not AnimationClips.");
  23. return;
  24. }
  25. //If necessary, create the animations folder.
  26. if (Directory.Exists("Assets/" + animationFolder) == false) {
  27. AssetDatabase.CreateFolder("Assets", animationFolder);
  28. }
  29. foreach (AnimationClip clip in imported) {
  30. string importedPath = AssetDatabase.GetAssetPath(clip);
  31. //If the animation came from an FBX, then use the FBX name as a subfolder to contain the animations.
  32. string copyPath;
  33. if (importedPath.Contains(".fbx")) {
  34. //With subfolder.
  35. string folder = importedPath.Substring(importedPath.LastIndexOf("/") + 1, importedPath.LastIndexOf(".") - importedPath.LastIndexOf("/") - 1);
  36. if (!Directory.Exists("Assets/Animations/" + folder)) {
  37. AssetDatabase.CreateFolder("Assets/Animations", folder);
  38. }
  39. copyPath = "Assets/Animations/" + folder + "/" + clip.name + duplicatePostfix + ".anim";
  40. } else {
  41. //No Subfolder
  42. copyPath = "Assets/Animations/" + clip.name + duplicatePostfix + ".anim";
  43. }
  44. Debug.Log("CopyPath: " + copyPath);
  45. CopyClip(importedPath, copyPath);
  46. AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath, typeof(AnimationClip)) as AnimationClip;
  47. if (copy == null)
  48. {
  49. Debug.Log("No copy found at " + copyPath);
  50. return;
  51. }
  52. // Copy curves from imported to copy
  53. AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(clip, true);
  54. for (int i = 0; i < curveDatas.Length; i++)
  55. {
  56. AnimationUtility.SetEditorCurve(
  57. copy,
  58. curveDatas[i].path,
  59. curveDatas[i].type,
  60. curveDatas[i].propertyName,
  61. curveDatas[i].curve
  62. );
  63. }
  64. Debug.Log("Copying curves into " + copy.name + " is done");
  65. }
  66. }
  67. }

....

进口fbx角色动画read-only解的更多相关文章

  1. CSS3图片翻转动画技术详解

    CSS动画非常的有趣:这种技术的美就在于,通过使用很多简单的属性,你能创建出漂亮的消隐效果.其中代表性的一种就是CSS图片翻转效果,能让你看到一张卡片的正反两面上的内容.本文就是要用最简单的方法向大家 ...

  2. iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类

    核心动画的详解介绍:CAAnimation(抽象类)   1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它 ...

  3. Android Animations 视图动画使用详解!!!

    转自:http://www.open-open.com/lib/view/open1335777066015.html Android Animations 视图动画使用详解 一.动画类型 Andro ...

  4. pygame 笔记-3 角色动画及背景的使用

    上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画. 素材准备:(原自github) 角色动画的原理:动画都是一帧帧渲染的,比如向左走的动 ...

  5. POPSpring动画参数详解

    POPSpring动画参数详解 效果 源码 https://github.com/YouXianMing/Animations // // POPSpringParameterController.m ...

  6. 【Salvation】——怪物角色动画&主角碰撞死亡动画

    写在前面:这个动画功能同样也是使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现,在怪物的角色动画中,很多与人物相同,这里不再重复. 一.设计敌人 拖一个精英sprite到层次面板 ...

  7. Unity3D NGUI UIPlayTween(原UIButtonTween)动画事件详解

    http://blog.csdn.net/asd237241291/article/details/8507817 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 Unity3D引擎技术 ...

  8. Android基础夯实--重温动画(五)之属性动画 ObjectAnimator详解

    只有一种真正的英雄主义 一.摘要 ObjectAnimator是ValueAnimator的子类,它和ValueAnimator一样,同样具有计算属性值的功能,但对比ValueAnimator,它会更 ...

  9. RocketMQ——角色与术语详解

    原文地址:http://jaskey.github.io/blog/2016/12/15/rocketmq-concept/ RocketMQ——角色与术语详解 2016-12-15 THU 15:4 ...

随机推荐

  1. 64位CentOS5.6安装Mysql 5.5.11GA

    1.更新并查看当前CentOS版本是否为5.6yum updatelsb_release -a 2.下载文件下载 bison-2.4.3.tar.gz到/usr/local/src下载 cmake-2 ...

  2. tar解压出错

    现象 # tar -zxvf aaa.tar.gz tar: This does not look like a tar archive tar: Skipping to next header ta ...

  3. HDU-2647拓扑排序

    这道题不能用矩阵表示,因为1w*1w绝对超内存,分析数据,前一个a的钱要多于后一个b,所以我们要把b作为出度,a为入度,如果不明白这个地方,举例:b——>a——>c——>d ,b为8 ...

  4. ssh 实体关系分析确立(ER图-实体关系图)

    比較简单的方式就是依据模仿同类产品,依据同类产品的进行模仿,表单就是一个起码要加的字段,然后依据项目须要额外添加字段. 注意:实体类之间的引用关系还须要考虑性能的影响.如:单向或是双向. 表设计: 设 ...

  5. 队列优化和斜率优化的dp

    可以用队列优化或斜率优化的dp这一类的问题为 1D/1D一类问题 即状态数是O(n),决策数也是O(n) 单调队列优化 我们来看这样一个问题:一个含有n项的数列(n<=2000000),求出每一 ...

  6. Android Ant 和 Gradle 打包流程和效率对照

    一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目文件夹.运行例如以下命令为ADT创建的项目加入ant build支持: android update proje ...

  7. quick-cocos2d-x游戏开发【7】——scheduler 定时器

    定时器用的地方还是比較多的,游戏中的逻辑推断非常多都是採用每帧运行.quick对于schedule的封装在scheduler这个lua文件里.假设是第一次接触quick的话,可能依照官方的api来写一 ...

  8. 关于产品的一些思考——腾讯之QQ音乐

    --------------------2014.5.11-------------------- 原来一直使用小米手机自带的音乐播放器,除了搜歌下载不方便,其它的还好(省电是最大的长处),用过Jin ...

  9. 递归算法的数据结构和算法 C++和PHP达到

    递归算法:它是一种间接的方法调用本身,直接或. 实施过程:按功能或子程序完成.在函数编写代码或子程序直接或间接拥有被称为.你可以完成递归. (相同类型的问题,子问题到最小问题有已知条件,然后来求解,然 ...

  10. NET 分布式架构开发项目实战

    .NET 分布式架构开发项目实战 从头到尾,一步一步讲述一个真实的项目实战,关注点主要是架构的思考和实现,以及如何解决平时项目遇到的一些问题. 同时也司公布源代码. 如何构建高性能,稳定SOA应用之- ...