Unity3D的Generic和Legacy动画例子(C#脚本)

编程入门 行业动态 更新时间:2024-10-20 00:29:34

Unity3D的Generic和Legacy动画例子(C#<a href=https://www.elefans.com/category/jswz/34/1771291.html style=脚本)"/>

Unity3D的Generic和Legacy动画例子(C#脚本)

现在网上虽然讲解Unity3D动画的文章不少,但是却少很少带实际例子的。刚好我之前给美术做了个简单的例子,所以整理一下就共享给大家了。主要是做了两种动画,分别有例子,按空格可以改变动画。具体的制作过程不会非常详细(写的过程中,Generic被我写得有点详细了:),这里假设大家都是有一定的编程或者Unity基础的。

一、基础

  1. Unity3D 5.3.5可编译运行
  2. 脚本采用C#脚本编写
  3. 模型是FBX模型文件
  4. 运行结果图
  5. 性子急的或者有基础可以直接下载源码进行研究

    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 initializationvoid Start (){animator = this.GetComponent<Animator>();//默认播放 idleanimator.SetBool("Move", false);}// Update is called once per framevoid Update () {if (Input.GetKeyDown(KeyCode.Space)){if (isRun)//平滑切换animator.SetBool("Move", false);elseanimator.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 framevoid 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#脚本)

本文发布于:2024-02-26 19:37:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1703654.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:脚本   例子   动画   Unity3D   Generic

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!