Unity3D的Generic和Legacy动画例子(C#脚本)
来源:互联网 发布:java的数据结构与算法 编辑:程序博客网 时间:2024/05/05 14:09
现在网上虽然讲解Unity3D动画的文章不少,但是却少很少带实际例子的。刚好我之前给美术做了个简单的例子,所以整理一下就共享给大家了。主要是做了两种动画,分别有例子,按空格可以改变动画。具体的制作过程不会非常详细(写的过程中,Generic被我写得有点详细了:),这里假设大家都是有一定的编程或者Unity基础的。
一、基础
- Unity3D 5.3.5可编译运行
- 脚本采用C#脚本编写
- 模型是FBX模型文件
- 运行结果图
性子急的或者有基础可以直接下载源码进行研究
Unity3D动画例子源码
二、Generic动画
Generic是新的动画系统,它就是支持非人形的动画,建议使用它。但是它不能向Humanoid重定向动画。
1. 设置资源格式
选中Generic_Animation资源,在显示面板那里 Rig选择Generic
2. 创建AnimatorController
最后命名为GenericController放在Anim文件夹下面
在Swordman的目录下,选择Generic_Animation,然后把里面自己需要用到的动作添加到控制器去
先拖一个Idle进去,再拖Run进来,如下图
3. 关联Idle和Run动作
需要给这两个动作设置相关参数,方便我们程序调用
在Idle上右键- — 选择 Make Transition,然后控制鼠标箭头连到Run
同样的Run也关联到Idle
4. 增加动作之间的状态
动作配置好了之后,我们就要动作设置状态了,这里我们简单设置,增加一个布尔值 Move来表示移动和停止。
那么Move为true的时候,表示需要移动了,则是从Idle切换到Run,false则是从Run切换到Idle
首先在Animator的paramer那里增加一个布尔的Move参数(没有之前是 list is Empty)
点击旁边的+号,然后选择Bool类型,最后命名为Move
5. 设置动作之间的状态
选中Idle到Run的箭头,然后在旁边设置move属性为true
Run到Idle的箭头,设置Move属性为false
6. 添加人物模型
前面的基础动作配置好了,那么就在场景中增加模型吧
首先把Swordman_No_Animation拖放到舞台,然后命名为GenericAnimation
刚拖进入是背面的,那么设置一下Y-180。
把Unity自带的Animation给删除掉(这个其实就是Legacy动画要用到了,后面再讲)
然后给增加一个Animator组建,在Add Component那里搜索Animator,然后点击添加进去
、
同时给这个组件设置相关参数了。
Controller和Avatar分别给添加上,点击那个小圆圈会出现选项了。最后添加GenericAnimMgr脚本。
到这里,暂时需要直接在Unity设置的东西就差不多了,那么开始写C#脚本了
7. C#控制脚本
脚本比较简单,主要是通过Animator 组件来数值Move的true和false
using UnityEngine;using System.Collections;/// <summary>/// 使用Animator控制角色动作的例子/// </summary>public class GenericAnimMgr : MonoBehaviour { private Animator animator; private bool isRun; // Use this for initialization void Start () { animator = this.GetComponent<Animator>(); //默认播放 idle animator.SetBool("Move", false); } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Space)) { if (isRun) //平滑切换 animator.SetBool("Move", false); else animator.SetBool("Move", true); isRun = !isRun; } }}
三、Legacy动画
legacy是老的动画系统,不多说。在引入Mecanim之前,Unity使用了自己的动画系统以便向后兼容,此系统仍然可用。 使用旧版动画系统主要是为了方便继续开发没有使用新Mecanim系统的项目。 然而,不推荐再在新项目中使用旧版动画系统。
1. 添加模型
步骤和Generic一样,把Swordman_No_Animation拖放到舞台,然后命名为LegacyAnimation
2.添加动作
直接在Animation组件里进行添加,不需要额外的其他控制器制作
Animation属性,是默认出现的动作,这里选择Idle
Animations表示这个模型有多少动作,这里选择2,同时增加Idle和Run
3.添加LegacyAnimMgr脚本
最后如何图
4. C#脚本
using System;using UnityEngine;using System.Collections;/// <summary>/// 动画控制器(基于Legacy的动画类型)/// by sodaChen/// </summary>public class LegacyAnimMgr : MonoBehaviour { /** 动画控制器 **/ private Animation anim; private bool isRun; void Start () { //获取到动画组件 anim = this.GetComponent<Animation>(); //默认播放站立动作(如果组件有配置,这里则可以不用写) //anim.Play("Sword-Idle"); } // Update is called once per frame void Update () { //通过不同的键盘控制来播放指定的动画 if (Input.GetKeyDown(KeyCode.Space)) { if (isRun) anim.CrossFade("Sword-Idle"); else //角色跑起来 anim.Play("Sword-Run"); isRun = !isRun; } if (Input.GetKeyDown(KeyCode.LeftAlt)) { //渐变到站立动作,有个缓冲动作。具体看API描述作用 anim.CrossFade("Sword-Idle"); //直接切换站立动作 //anim.Play("Sword-Idle"); } }}
四、总结
Unity做动画还是比较简单的,其实还有Humanoid动画,就是新的人形重定向动画系统。不过这里的制作还是比较依赖Unity,小游戏之类的,动画模型不多,还可以人力去做,去设置之间的关系。在实际开发手游项目过程,我们会采用一些脚本自动打包这些模型动作,以及自动绑定相关的脚本,这样维护性就高很多了。
- Unity3D的Generic和Legacy动画例子(C#脚本)
- 【Unity3D】Generic 动画中 Root Motion的概念和使用
- Unity3d 中Legacy动画系统-剑圣的动画
- 在Unity3D的Legacy动画系统中应用Root Motion
- Unity3D的Legacy动画系统中应用Root Motion
- 在Unity3D的Legacy动画系统中应用Root Motion
- 在Unity3D的Legacy动画系统中应用Root Motion
- unity3D 中Generic动画导入设置和Root Motion之间的关系
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- unity3d legacy动画事件总是丢失
- Unity3D之Legacy动画系统学习笔记
- 【Unity3D】导入FBX模型使用Legacy动画的Scale缩放问题
- Unity3D的JS和C#脚本互调
- unity3D Mecanim动画系统Generic动画支持动画中的位移
- Generic/Legacy ——ApplyRootMotion
- Editor中添加脚本,自动修改动画模式Legacy模式
- Linux目录结构
- 窗体位置设置(StartPosition属性)
- 在Linux下使用TCP封装器来加强网络服务安全
- JVM系列三:JVM参数设置、分析
- C++基础
- Unity3D的Generic和Legacy动画例子(C#脚本)
- Linux忘记密码
- 一道智力游戏趣味编程题
- 深度剖析Linux与Windows系统的区别(长文,带图)
- freetds的安装和使用
- Intent对象练习2---使用Intent拨打电话
- TangYuan使用教程和技术设计
- 机器学习(附学习资料)
- 决策树 香农熵