找回密码
 注册帐号

扫一扫,访问微社区

基础知识 unity从模型中抽取动画文件(animation)

0
回复
1482
查看
[ 复制链接 ]
7日久生情
4363/5000
排名
3041
昨日变化

1646

主题

1657

帖子

4363

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132510
好友
17
蛮牛币
87361
威望
0
注册时间
2015-12-24
在线时间
352 小时
最后登录
2017-6-20
2016-8-3 11:06:43 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
  由于模型是由第三方的软件制作的,用unity不能直接编辑模型里的动画文件(read-ony),比如为动画绑定事件,所以要把模型中的动画文件抽取出来,这样文件是可写的了。抽取动画文件的脚本非本人所写,贴在此处大家分享。---unity3d

  [csharp] view plain copy 在CODE上查看代码片派生到我的代码片

  using UnityEditor;

  using UnityEngine;

  using System.IO;

  public class CurvesTransferer

  {

  [MenuItem("Character Generator/Transfer Clip Curves to Copy")]

  static void CopyClip()

  {

  foreach (Object o in Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets))

  {

  if (!(o is GameObject)) continue;

  if (!o.name.Contains("@")) continue;

  GameObject animationFBX = (GameObject)o;

  Clip srcClip = animationFBX.animation.clip;

  AnimationClip newClip = new AnimationClip();

  newClip.name = srcClip.name;

  // Create directory to store generated materials.

  if (!Directory.Exists(AnimationsPath(animationFBX)))

  Directory.CreateDirectory(AnimationsPath(animationFBX));

  string animationPath = AnimationsPath(animationFBX) + newClip.name + ".anim";

  AssetDatabase.CreateAsset(newClip, animationPath);

  AssetDatabase.Refresh();

  AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(srcClip, true);

  for (int i = 0; i < curveDatas.Length; i++)

  {

  AnimationUtility.SetEditorCurve(newClip, curveDatas[i].path, curveDatas[i].type, curveDatas[i].propertyName, curveDatas[i].curve);

  }

  }

  }

  // Returns the path to the directory that holds the specified FBX.

  static string CharacterRoot(GameObject character)

  {

  string root = AssetDatabase.GetAssetPath(character);

  return root.Substring(0, root.LastIndexOf('/') + 1);

  }

  // Returns the path to the directory that holds materials generated

  // for the specified FBX.

  public static string AnimationsPath(GameObject character)

  {

  return CharacterRoot(character) + "Copy Animations/";

  }

  }

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关注游戏蛮牛公众号送vip