[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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea 2021 2.3 激活码_在线激活

    (idea 2021 2.3 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月29日
    325
  • SLAM算法总结——经典SLAM算法框架总结

    SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结从研究生接触SLAM算法到现在也有

    2022年6月30日
    24
  • 《JavaScript 模式》读书笔记(5)— 对象创建模式3

    这一篇,我们主要来学习了解下沙箱模式以及静态成员的相关内容。五、沙箱模式沙箱模式(sandboxpattern)解决了命名空间模式的如下几个缺点:对单个全局变量的依赖变成了对应用程序的全局变量

    2022年3月25日
    38
  • Python 相对路径问题:“No such file or directory“,原因及解决方法

    Python 相对路径问题:“No such file or directory“,原因及解决方法如果你取相对路径不是在主文件里,可能就会有相对路径问题:”Nosuchfileordirectory”。因为python的相对路径,相对的都是主文件。main.py是主文件。conf.py里引用config.txt用相对路径。如果用.或…相对的是main.py,所以用”./config.txt”,相对于main.py是同一个目录下。.指当前文件所在的文件夹,…指当前文件的上一级目录。

    2022年5月7日
    44
  • springapplication注解_java导入外部jar包

    springapplication注解_java导入外部jar包SpringApplication定义:Spring应用引导类,提供便利的自定义行为方法场景:嵌入式Web应用和非Web应用准备阶段配置:SpringBean来源 Java配置Class:Spring注解驱动中Java配置类,大多是情况下是Spring模式注解锁标注的类,如被@configuration标注的类 XML上下文配置文件:用于Spring传统配置驱动中的xml文件 BeanDefinitionLoader(BeanDefinitionRegistryregistr

    2025年10月17日
    6
  • 中标麒麟/NeoKylin U盘安装系统「建议收藏」

    中标麒麟/NeoKylin U盘安装系统「建议收藏」这里以NeoKylin6为例,其他版本与此相类似大同小异。但是下载指定版本的镜像时要注意配合该版本的软件包是否充足,不然就会遇到安装好系统很多软件无法安装或更新的情况。1.官方下载地址:http://download.cs2c.com.cn/neokylin/desktop/releases/2.第二步,在上个地址中找你想要下载的版本,注意前面说的先检查下资源,以我想下载的版本6.0为…

    2022年8月10日
    17

发表回复

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

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