进口fbx角色动画read-only解

进口fbx角色动画read-only解

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

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

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

….

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117386.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 回溯算法之N皇后问题[通俗易懂]

    回溯算法之N皇后问题[通俗易懂]问题描述什么是皇后问题八皇后问题(英文:Eightqueens),是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。如果经过±90度、±180度旋转,和对角线对称变换的摆法看成一类,共有42类。计算机发明后,有多种计算机语

    2022年9月30日
    2
  • 浅谈ViewState[通俗易懂]

    浅谈ViewState[通俗易懂]一、什么是ViewState二、使用

    2022年7月21日
    12
  • Idea使用git切换远程分支[通俗易懂]

    描述公司开发人数越来越多,项目业务逻辑越来越复杂,就有了越来越多的分支,各个小伙伴在各自的分支上进行开发,然后进行合并,如果本大爷需要切换到别的开发分支上,那如何实现呢?解决方案屁话不多说,直接上图 点击鼠标右键,选择GIT–&gt;Repository–&gt;Pull… Branchestomerge:选择你需要的分支,如果你没遇到你想要的分支就点击刷新一下。…

    2022年4月4日
    898
  • 关于GHO文件怎么安装,GHO文件怎么打开等问题解答

    关于GHO文件怎么安装,GHO文件怎么打开等问题解答首先说下GHO文件是什么,GHO文件是用GHOST软件对电脑硬盘中的系统备份生成的文件.我们用一键备份工具备份电脑系统会生成一个GHO文件,另外我们下载的ghost系统中(如雨林深度之类)也有一个GHO文件.1,问:gho文件怎么装系统,怎么安装gho文件. 答:总的来说是通过ghost软件来安装.比如U盘启动工具,网上的什么老毛桃,大白菜,电脑店之类的U盘启动工具都可以来安装,通过

    2022年7月12日
    16
  • 项目经理的职业化素养建设——石化干部管理学院培训「建议收藏」

    项目经理的职业化素养建设——石化干部管理学院培训「建议收藏」5月26日,应邀到中石化干部培训管理学院,给中石化海外新项目经理进行《项目经理职业化素养和核心能力建设》的培训。中石化干部培训管理学院坐落在北京立水桥畔,是中石化培训和培养干部的基地。参训的学员主要为中石化的海外项目经理,学员年龄在30-40岁之间,长期在海外工作,主管中石化海外项目管理,具有很强项目管理实践经验。本次培训定位在讲授“作为一个项目经理应该培养和建设什么样的职业化素养和和核心能力”,

    2022年10月16日
    3
  • 今年暑假不ac_2019年初中什么时候放寒假

    今年暑假不ac_2019年初中什么时候放寒假今年暑假不ac

    2022年4月20日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号