zoukankan      html  css  js  c++  java
  • Unity3D研究院之Machine动画脚本自动生成AnimatorController(七十一)

    http://www.xuanyusong.com/archives/2811

    以前的项目一直不敢用Machine动画,因为当时立项的时候Machine动画还不成熟,最近项目做得差不多了我能有点时间学习,我就想在研究学习学习Machine。用Machine动画的时候需要创建一个AnimatorController这个文件,需要手动的把动画绑上去,我觉得这东西绝对不能手动绑上去,手动操作很容易出错,而且假如你已经做好了300个模型 动画。 策划第二天给你说 我们要给每个模型加一个动画,难道还要手动绑吗??必须脚本自动化!!!

    1、Machine的优点我就不累赘了网上现在已经一大堆了。

    2、Prefab自动化生成的方法我也不累赘了,如果模型的Prefab你还在手动做的话我建议你一定要换成自动生成的方法。尽量让美术不要碰U3D,只让美术出原始模型、贴图、动作、策划提供一个表格来描述 每个Prefab是由那些模型、动画、贴图组成,程序自动生成Prefab。

    上代码

    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绑定上如下测试代码,如果你现在还在用老版本的动画,看到如下代码你应该觉得很亲切,因为很像没啥区别。。

     OK,按下不同的按钮控制动画的播放。由于我的例子里面用的模型涉及到一些隐私,所以本文的工程我就不分享了,一共也没几行代码,大家照着打一遍估计就出来了。 有问题就在下面留言吧,也希望你提出你宝贵的看法。

     

    8月26日补充,前几天有朋友问我如何在Unity2D上去生成AnimationController,3D的话因为动画文件是美术做好的,但是2D美术只会提供图片,所以动画也需要我们自动来生成。因为我一直没时间研究。后来他把自己的研究成果告诉了我,我就补充在博客里。


  • 相关阅读:
    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
    jQuery UI组件库Kendo UI使用技巧小分享
    Kendo UI ListView模板功能,让Web开发更轻松
    UI组件套包DevExpress ASP.NET Core v20.2新版亮点:全新的查询生成器
    Devexpress WinForms最新版开发.NET环境配置Visual Studo和SQL Server对应版本
    全新的桌面应用数据可视化呈现方式,Sankey Diagram控件你了解多少?
    java中的递归方法
    连接数据库查询 将查询结果写入exce文件中
    java连接mysql数据查询数据
  • 原文地址:https://www.cnblogs.com/nafio/p/9137511.html
Copyright © 2011-2022 走看看