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导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...
随机推荐
- jQuery之load、unload、onunload和onbeforeunload
1.load:jQuery load() 方法是简单但强大的 AJAX 方法.load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法:$(selector).load(URL,dat ...
- C++实现python标准库中的Counter
看python standard library by exmple里面提到一个Counter容器,它像muliset一样,能够维持一个集合,并在常量时间插入元素.查询某个元素的个数,而且还提供了一个 ...
- 怎么在官网下载jstl【配图详解】
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个非常优秀的开源JSP标签库,如果要在系统使用JSTL标签,则必须将jstl.jar和 standard.jar文件放 ...
- iOS 实现简单的Http 服务
http 是计算机之间通讯协议的比较简单的一种.在iPhone上,由于没有同步数据和文件共享,所以实现PC与设备之间的数据传输的最佳方式就是在程序中嵌套一个http 服务器.在这篇帖子中,我将简单的演 ...
- 数据结构 《2》----基于邻接表表示的图的实现 DFS(递归和非递归), BFS
图通常有两种表示方法: 邻接矩阵 和 邻接表 对于稀疏的图,邻接表表示能够极大地节省空间. 以下是图的数据结构的主要部分: struct Vertex{ ElementType element; // ...
- YII2.0中实现高级注册
如何在不修改逻辑代码的情况下完美解决以上三个问题?看了下面的教程,一目了然! 以高级版2.0.6为例,打开/frontend/models/SignupForm.php class SignupFor ...
- HDU 2157
http://acm.hdu.edu.cn/showproblem.php?pid=2157 求A到B经过K个点的方案数 http://www.matrix67.com/blog/archives/2 ...
- 【avalon源码】scpCompile
function noop() {} function scpCompile(array) { return Function.apply(noop, array) } // var fn = new ...
- jq实现动态添加样式
<script> $(function(){ $("#list_zlm > a").hover(function(){ $(this).addClass(&quo ...
- VS2010 安装使用STLPort
VS2010 安装使用STLport 1.本机环境 win7 64位 visual studio 2010 中文旗舰版 STLport-5.2.1.tar.bz2 2.下载STLport http:/ ...