Unity3D研究院之Machine动画脚本自动生成AnimatorController(七十一)
以前的项目一直不敢用Machine动画,因为当时立项的时候Machine动画还不成熟,最近项目做得差不多了我能有点时间学习,我就想在研究学习学习Machine。用Machine动画的时候需要创建一个AnimatorController这个文件,需要手动的把动画绑上去,我觉得这东西绝对不能手动绑上去,手动操作很容易出错,而且假如你已经做好了300个模型 动画。 策划第二天给你说 我们要给每个模型加一个动画,难道还要手动绑吗??必须脚本自动化!!!
1、Machine的优点我就不累赘了网上现在已经一大堆了。
2、Prefab自动化生成的方法我也不累赘了,如果模型的Prefab你还在手动做的话我建议你一定要换成自动生成的方法。尽量让美术不要碰U3D,只让美术出原始模型、贴图、动作、策划提供一个表格来描述 每个Prefab是由那些模型、动画、贴图组成,程序自动生成Prefab。
上代码
C#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
using UnityEngine;
using System.Collections;
using UnityEditor;
using UnityEditorInternal;
public class Test :Editor {
[MenuItem("Test/Test")]
static void DoCreateAnimationAssets()
{
//创建animationController文件,保存在Assets路径下
AnimatorController animatorController = AnimatorController.CreateAnimatorControllerAtPath("Assets/animation.controller");
//得到它的Layer, 默认layer为base 你可以去拓展
AnimatorControllerLayer layer = animatorController.GetLayer(0);
//把动画文件保存在我们创建的AnimationController中
AddStateTransition("Assets/Resources/airenlieren@Idle.FBX",layer);
AddStateTransition("Assets/Resources/attack@attack.FBX",layer);
AddStateTransition("Assets/Resources/aersasi@Run.FBX",layer);
}
private static void AddStateTransition(string path, AnimatorControllerLayer layer)
{
UnityEditorInternal.StateMachine sm = layer.stateMachine;
//根据动画文件读取它的AnimationClip对象
AnimationClip newClip = AssetDatabase.LoadAssetAtPath(path, typeof(AnimationClip)) as AnimationClip;
//取出动画名子 添加到state里面
State state = sm.AddState(newClip.name);
state.SetAnimationClip(newClip,layer);
//把state添加在layer里面
Transition trans = sm.AddAnyStateTransition(state);
//把默认的时间条件删除
trans.RemoveCondition(0);
}
}
|
在导航菜单里点击Test按钮,你的AnimatorController文件就创建好了。
接下来就是生成Prefab ,你可以根据美术提供的描述文件,来生成Prefab,生成的时候把我们创建的AnimatorController绑到生成的Prefab上面。
我觉得用Machine动画最好的一点就是可以多个模型的骨骼可以并用,这样的话可以减少包的大小。但是我个人觉得既然骨骼重用,那么肯定是行为比较相似的模型的可以重用,一些比较有个性的模型恐怕也不能重用。如果要用machine动画我觉得策划和美术就需要在这里考虑了,把模型分好类分好哪一类模型重用一套骨骼。(如果你有更好的经验请在下面留言,谢谢)
OK如下图所示,动画的结构我已经生成出来了。

最后给你的Prefab绑定上如下测试代码,如果你现在还在用老版本的动画,看到如下代码你应该觉得很亲切,因为很像没啥区别。。
C#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
Animator animator ;
void Start ()
{
animator = GetComponent();
}
void OnGUI()
{
if(GUILayout.Button("attack"))
{
animator.Play("attack");
}
if(GUILayout.Button("Run"))
{
animator.Play("Run");
}
}
}
|
OK,按下不同的按钮控制动画的播放。由于我的例子里面用的模型涉及到一些隐私,所以本文的工程我就不分享了,一共也没几行代码,大家照着打一遍估计就出来了。 有问题就在下面留言吧,也希望你提出你宝贵的看法。
8月26日补充,前几天有朋友问我如何在Unity2D上去生成AnimationController,3D的话因为动画文件是美术做好的,但是2D美术只会提供图片,所以动画也需要我们自动来生成。因为我一直没时间研究。后来他把自己的研究成果告诉了我,我就补充在博客里。

- 本文固定链接: http://www.xuanyusong.com/archives/2811
- 转载请注明: 雨松MOMO 2014年06月22日 于 雨松MOMO程序研究院 发表
Unity3D研究院之Machine动画脚本自动生成AnimatorController(七十一)的更多相关文章
- Unity3D研究院之Machine动画脚本自动生成AnimatorController
原地址: http://www.xuanyusong.com/archives/2811 以前的项目一直不敢用Machine动画,因为当时立项的时候Machine动画还不成熟,最近项目做得差不多了我能 ...
- Unity自动生成AnimatorController
上一篇写了如何自动切割动画,这一篇写如何自动生成AnimatorController. 之前网上查了很多资料,看的一直很蒙,看不懂是怎么回事的,这里我先给大家明确几个概念: 画的不好,大家将就着看,写 ...
- 转 [教程] Unity3D中角色的动画脚本的编写(二)
在上一篇,我们介绍了有关Animation这个类中的部分方法,我后来想了想,这么介绍也不是个办法(其实有些方法我自己也没用过),该介绍点实际的东西了,毕竟我们是要做东西出来的.那好 ...
- Unity3D读取模型文件自动生成AnimatorController简单实例
前几天接到一个任务,做一个导入.控制模型动画的工具类,没有太具体的要求,于是就自行思考实际需求,最终根据宣雨松老师的一篇博客,自己规范了一下写了一个工具类.相关工具代码及测试用例已上传至Github. ...
- (转)Unity3D研究院之游戏架构脚本该如何来写(三十九)
这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难.这篇文章的目的是让哪些已经上手Unity3D游戏 ...
- 【原创】使用批处理脚本自动生成并上传NuGet包
Hello 大家好,我是TANZAME,我们又见面了. NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自 ...
- Fitnesse测试用例脚本自动生成设计
Fitnesse是通过wiki形式来展示.管理和执行测试用例,若要在Fitnesse上设计测试用例,前提是必须熟悉一定的wiki语法,虽然wiki语法简单,但是若要设计成百上千的测试用例还是有很大的工 ...
- odoo14开发之脚本自动生成代码
通过解析excel,自动生成odoo代码实现 一.首先做一个字段配置的excel模板 第二步.读取excel里面的模板,并写入到txt文件里 逻辑代码: # -*- coding: utf-8 -*- ...
- (转) [教程] Unity3D中角色的动画脚本的编写(一)
ps: 这两天研究unity3d,对动画处理特别迷糊,不知FBX导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...
随机推荐
- 《Head First设计模式(中文版)》
<Head First设计模式(中文版)>共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式.前言先介绍<Head First设计模式(中文版)>的 ...
- C#移动无标题栏窗体的四种代码
第一种采用,需注意窗体上的控件是否把窗体覆盖了...MouseDown.MouseMove.MouseUp事件应该是鼠标所处位置最顶层的控件的事件在窗体的类中声明两个变量private Point m ...
- R.java不能自动更新
1. The type R is already defined. (很多时候我们在导入其他人的程序的时候,会遇到这个错误) 通常在project里有两个R.java,一个在src,一个在gen,通常 ...
- Boostrap栅格系统
Boostrap排版.链接样式设置了基本的全局样式.分别是:为body元素设置 布局容器:Bootstrap需要为页面内容和栅格系统包裹一个:container容器.Bootstrap提供了两个作此用 ...
- Android消息推送
1.引言 所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息.比如一些新闻客户端,每隔一段时间收到一条或者多条通知,这就是从服务器端传来的推送消息:还比如常用的一些IM软件如微信.GTal ...
- iptables_forward
FORWARD 好了,我们接着往下走,这个包已经过了两个PREROUTING链了,这个时候,出现了一个分支转折的地方,也就是图中下方的那个菱形(FORWARD),转发!这里有一个对目的地址的判断(这里 ...
- Recaman's Sequence_递推
Description The Recaman's sequence is defined by a0 = 0 ; for m > 0, am = am−1 − m if the rsultin ...
- Codechef2015 May - Chef and Strings (后缀自动机)
用后缀自动机统计出出现1~n次的串的数量f[i] 对于ans[k]=sigma(f[i]*C(i,k)) i>=k ; mo=; ..maxn] of dword; nt:..maxn,'a'. ...
- magento性能优化
magento性能优化 14个快速加载web页面的技巧: 减少HTTP请求数使用CDN增加过期头信息gzip压缩传输内容将css样式表放在页首将js文件放在页尾不使用css表达式尽量少用内联式的css ...
- Magento Soap Api接口出错无法使用
在给客户测试Magento Soap接口的时候出现如下错误提示. This page contains the following errors:error on line 3 at column 6 ...