[Unity3D]Unity4全新的动画系统Mecanim

[Unity3D]Unity4全新的动画系统Mecanim

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

Unity4.X添加一个新的动画系统,以取代原有的3.X旧的动画系统,全新的动画系统Mecanim是官方推荐,它使我们能够写更少的代码实现连续动画。

效果图

[Unity3D]Unity4全新的动画系统Mecanim

Unity3.X中动画系统播放动画

使用播放play()或淡入淡出播放CrossFade()

比如:

animation.Play("name");
animation.CrossFade("name");

也能够做成队列动画。然后播放,比如:

animation.PlayQueued("name");
animation.CrossFade("name1");

代码实现倒序播放

animation.Play(clip1); 
animation[clip1].speed = animationspeed * -1.0; 


老的动画系统要实现一个连续的队列动画。是要通过代码来进行逻辑控制,而在新的动画系统中,要实现这一功能将很方便。比如要依据玩家连续点击button的次数来实现一系列动作的组合动画。

比如:

站立动画->攻击1。

。。攻击N->站立动画

这之间能够有N个连续动画的组合,能够依据用户点击button的频率来推断执行到第几个连续的动画。

如图,一般导入的动画模型都是原始模型没有动画,然后是动画模型,每个动画模型都依赖原始模型,命名后面+@name。相应的状态动画。

[Unity3D]Unity4全新的动画系统Mecanim

unity4.X版本号还保留了原始动画系统,将模型拖放到Hierarchy视图中没有Animation组件而是Animator组件。假设你还想用老的动画系统。就要切换动画的类型Rig->Animation Type->Legacy

[Unity3D]Unity4全新的动画系统Mecanim


Unity4.X中动画系统播放动画

假设我们要让模型改成新动画系统的类型。我们最好用工具,让程序来批量改变模型的类型,建议放在Editor下。

using UnityEditor;

public class MyEditor : AssetPostprocessor {

	public void OnPreprocessModel()
    {
        ModelImporter modelImporter = (ModelImporter)assetImporter;
        modelImporter.animationType = ModelImporterAnimationType.Human;
    }
}

然后将模型拖放Project下。会发现模型的类型会自己主动改动成Humanoid格式,这样的格式通常是人物模型选择该格式。

创建模型的匹配骨骼文件。点击Configure能够预览骨骼。

[Unity3D]Unity4全新的动画系统Mecanim

节约资源起见。其它模型就由这个avatar copy一下就可以。

[Unity3D]Unity4全新的动画系统Mecanim

创建动画控制器AnimatorController

Project->Create->AnimatiorController。然后讲模型的Animator下的Controller属性赋值这个动画控制器

[Unity3D]Unity4全新的动画系统Mecanim

然后打开菜单条的Window->Animator,将动画文件拖放到Animator中,黄色箭头代表根动画。右击选择Set As Default能够设置为根动画,选择Make Transition能够连接下一个动画节点。

每一条连接线都是一个状态,能够通过左下角的Parameters面板加入Bool变量来控制连接线是否连通。从而来改变模型的动画。

[Unity3D]Unity4全新的动画系统Mecanim

设置连接线的连通条件,点击某一条线。然后在Inspector->Conditions选择Parameters里面的Bool值。而且设置它的默认连通状态是ture还是false。

[Unity3D]Unity4全新的动画系统Mecanim

代码实现人物从等到状态、跑步状态、行走状态的两两状态切换:

using UnityEngine;
using System.Collections;
//Created By Aladdin    http://blog.csdn.net/dingxiaowei2013/article/details/36911203


public class AladdinScript : MonoBehaviour {

    public Transform transform;
    //GUILabel
    public GUIContent[] GUIContents;
    //动画控制器
    private Animator animator;
    //当前状态
    private string currentState = "";

    //获取动画控制器
	void Start () {
        animator = transform.GetComponent<Animator>();
	}
	
	void OnGUI()
    {
        GUILayout.BeginVertical("box");
        for(int i = 0;i<GUIContents.Length;i++)
        {
            //假设点击了某个状态的button
            if (GUILayout.Button(GUIContents[i]))
            {
                currentState = GUIContents[i].text;
            }

            AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
            //从Wait->Walk
            if (stateInfo.IsName("Base Layer.wait") && currentState.Equals("Walk"))
            {
                animator.SetBool("WaitToWalk", true);
            }
            //从Walk->Wait
            else if (stateInfo.IsName("Base Layer.walk") && currentState.Equals("Wait"))
            {
                animator.SetBool("WaitToWalk", false);
            }
            //从Wait->Run
            else if (stateInfo.IsName("Base Layer.wait") && currentState.Equals("Run"))
            {
                animator.SetBool("WaitToRun", true);
            }
            //从Run->Wait
            else if (stateInfo.IsName("Base Layer.run") && currentState.Equals("Wait"))
            {
                animator.SetBool("WaitToRun", false);
            }
            //从Walk->Run
            else if (stateInfo.IsName("Base Layer.walk") && currentState.Equals("Run"))
            {
                animator.SetBool("WalkToRun", true);
            }
            //从Run->Walk
            else if (stateInfo.IsName("Base Layer.run") && currentState.Equals("Walk"))
            {
                animator.SetBool("WalkToRun", false);
            }
        }
    }
}

执行效果图如上图所看到的。

欢迎关注我的微博  

点击下载project

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:375151422                               cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117871.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月17日 上午10:00
下一篇 2021年12月17日 上午11:00


相关推荐

  • 模电七:集成运算放大器(上)

    模电七:集成运算放大器(上)!!!!

    2022年5月27日
    31
  • nohup linux命令,Linux nohup命令

    nohup linux命令,Linux nohup命令nohup 命令用于执行另一个程序或者命令并将其参数指定为忽略所有 SIGHUP 中断 信号 SIGHUP 是当前控制终端关闭时发送到进程的信号通常 当您通过 SSH 运行命令时 如果连接断开 或者退出 SSH SSH 会话将终止 并且终端执行的所有命令都将停止 如果你不想被某一程序被终止 可以使用 nohup 命令 它将忽略所有中断信号 命令程序将继续运行 如何使用 nohup 命令该 nohup 命令的语法如下 noh

    2026年3月16日
    2
  • 在大数据中如何寻找相似的文档(shingle, minhash, LSH)(一)

    在大数据中如何寻找相似的文档(shingle, minhash, LSH)(一)场景 在一堆非常多的文档中 找到相似的文档 或者对文档间的相似性进行评估 当应用于此类目的的时候 我们最常用的用来表示一篇文档的方法是 shingling 1 k shingles nbsp nbsp nbsp 可以把一篇文档看成一个字符串 那么一篇文档的 k shingle 就是在这篇文档中出过现的任何长度为 k 的字符串 k shingles 就是改篇文档所有 k shingle 的集合 那么 k 的大小决定于什么

    2026年3月19日
    3
  • 微信小程序api

    微信小程序api1.api1.概述小程序开发框架提供丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等2.api分类监听api约定以on开头的API用了来监听某个事件是否触发同步api约定,以Sync结尾的API都是同步API,直接接取函数返回的的结果既可,不需要等待异步api大多数API都是异步API,如wx.request,wx.login等,异步api方法主体是object结构,都有success/faill/complete几乎所有的异步api都支

    2022年7月16日
    20
  • MongoDB 客户端工具

    MongoDB 客户端工具MongoVUE nbsp nbsp nbsp nbsp 缺点 没命令行输入的界面 nbsp nbsp nbsp nbsp 链接 http pan baidu com s 1skuEOPZ 密码 36b6 MongoVUE1 6 9 Robomongo nbsp nbsp nbsp nbsp 优点 有命令行输入的界面 nbsp nbsp nbsp nbsp 缺点 nbsp nbsp nbsp nbsp 1 没有导出功能 nbsp nbsp nbsp nbsp 2 只有命令行的方式 nbsp nbsp nbsp nbsp 官网 https robomongo

    2026年3月20日
    2
  • 数据库导出表结构语句_sqlserver导出表结构

    数据库导出表结构语句_sqlserver导出表结构第一种:利用sql语句查询需要说明的是该方法应该适用很多工具,博主用的是navicatSELECTTABLE_NAME表名,COLUMN_NAME列名,COLUMN_TYPE数据类型,DATA_TYPE字段类型,CHARACTER_MAXIMUM_LENGTH长度,IS_NULLABLE是否为空…

    2025年9月8日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号