Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关

# Unity3d Mecanim动画如何应用3dmax中的动画位移 Unity3d Mecanim动画如何应用3dmax中的动画位移大家好!我是小周,这是我的第一篇博客,自己喜欢游戏,所以大学报了计算机专业,毕业以后也如愿以偿的进入了游戏开发者的队列,现在用Unity3d做MMORPG游戏快一年了,尝试着分享一下自己的经验。 每博加油:不计成本地努力!程序动画流程游戏当中角色动画前后制作过程:2D形象设计图->3D模型制作->为模型搭建骨骼制作动画->导出FBX- 阅读详情

资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载。

注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBundle进行打包的。

我们一般使用FBX类型的模型及动画文件,而动画文件的储存一般有两种情况,一是所有的动画和模型都一起存放到一个文件中,还有一种情况是模型单独一个文件而动画单独一个文件。这里我们就两种情况都看一下。

使用的资源是Unity3D自带的以及从一本教材中取出的两种类型的动画资源,同时需要对其动画创建对应的Animator Controller。

模型动画都存放在一个文件中的情况

一个FBX文件保存了模型、骨骼和动画,如下图:



下面是配置的Animator Controller:


需要注意的是,官方并没有提供为Animator设置Animator Controller的接口,所以我们必须将配置好的GameObject制作为一个预制件进行加载。

Resources加载

using UnityEngine;
using System.Collections;

public class AllInOneResourcesLoad : MonoBehaviour
{
    private Animator _animator;

    void Start()
    {
        GameObject go = Resources.Load<GameObject>("AllInOne/ConstructorPrefab");

        GameObject man = Instantiate(go) as GameObject;
        _animator = man.GetComponent<Animator>();
    }
    
    void OnGUI()
    {
        if(GUI.Button(new Rect(0, 0, 100, 30), "idle"))
        {
            _animator.SetBool("walk", false);
            _animator.SetBool("run", false);
        }
        if(GUI.Button(new Rect(100, 0, 100, 30), "walk"))
        {
            _animator.SetBool("walk", true);
            _animator.SetBool("run", false);
        }
        if(GUI.Button(new Rect(200, 0, 100, 30), "run"))
        {
            _animator.SetBool("walk", false);
            _animator.SetBool("run", true);
        }
        if(GUI.Button(new Rect(300, 0, 100, 30), "jump"))
        {
            _animator.SetTrigger("jump");
        }
    }
}



AssetBundle加载

打包

using UnityEngine;
using UnityEditor;

public class CreateAllInOneAB
{
    [MenuItem("Tool/CreateAllInOneAB")]
    private static void Create()
    {
        BuildPipeline.BuildAssetBundle(null, new[]
            {
                AssetDatabase.LoadAssetAtPath("Assets/Resources/AllInOne/ConstructorPrefab.prefab", typeof(GameObject))
            },
            Application.streamingAssetsPath + "/AllInOne.assetbundle",
            BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets | BuildAssetBundleOptions.UncompressedAssetBundle,
            BuildTarget.StandaloneWindows64);
    }
}



加载

using UnityEngine;
using System.Collections;

public class AllInOneAssetBundleLoad : MonoBehaviour
{
    private Animator _animator;

    void Start()
    {
        AssetBundle assetBundle = AssetBundle.CreateFromFile(Application.streamingAssetsPath + "/AllInOne.assetbundle");

        GameObject go = assetBundle.Load("ConstructorPrefab", typeof(GameObject)) as GameObject;

        GameObject man = Instantiate(go) as GameObject;
        _animator = man.GetComponent<Animator>();
    }

    void OnGUI()
    {
        if(GUI.Button(new Rect(0, 0, 100, 30), "idle"))
        {
            _animator.SetBool("walk", false);
            _animator.SetBool("run", false);
        }
        if (GUI.Button(new Rect(100, 0, 100, 30), "walk"))
        {
            _animator.SetBool("walk", true);
            _animator.SetBool("run", false);
        }
        if (GUI.Button(new Rect(200, 0, 100, 30), "run"))
        {
            _animator.SetBool("walk", false);
            _animator.SetBool("run", true);
        }
        if (GUI.Button(new Rect(300, 0, 100, 30), "jump"))
        {
            _animator.SetTrigger("jump");
        }
    }
}

模型动画分开存放的情况

还有一种情况是模型和动画是分为多个FBX文件存放的,比如下面是模型文件:


虽然有一个Take 001的动画,但是实际上我们并不使用该动画,而是使用下面仅保存了动画的FBX文件:


下面是配置的Animator Controller:


除了没有提供设置Animator Controller的接口,也无法在运行时对动画剪辑进行增加删除的操作,所以我们一般打包时就收集所有的依赖项一起打包,归根结底还是只需要一个制作好的预制件即可。

从这个角度看,其实是否将动画进行拆分最终的使用方式都是一样的。

Resources加载

using UnityEngine;
using System.Collections;

public class ResourcesLoad : MonoBehaviour
{
    private Animator _animator;

    void Start()
    {
        GameObject go = Resources.Load<GameObject>("ZombieNurse/ZombieNursePrefab");

        GameObject man = Instantiate(go) as GameObject;
        _animator = man.GetComponent<Animator>();
    }

    void OnGUI()
    {
        if(GUI.Button(new Rect(0, 0, 100, 30), "idle"))
        {
            _animator.SetBool("run", false);
        }
        if(GUI.Button(new Rect(100, 0, 100, 30), "run"))
        {
            _animator.SetBool("run", true);
        }
        if(GUI.Button(new Rect(200, 0, 100, 30), "attack"))
        {
            _animator.SetTrigger("attack");
        }
        if(GUI.Button(new Rect(300, 0, 100, 30), "dead"))
        {
            _animator.SetTrigger("dead");
        }
    }
}


AssetBundle加载

打包

using UnityEditor;
using UnityEngine;

public class CreateAB
{
    [MenuItem("Tool/CreateAB")]
    private static void Create()
    {
        BuildPipeline.BuildAssetBundle(null, new[]
            {
                AssetDatabase.LoadAssetAtPath("Assets/Resources/ZombieNurse/ZombieNursePrefab.prefab", typeof(GameObject))
            },
            Application.streamingAssetsPath + "/AB.assetbundle",
            BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets | BuildAssetBundleOptions.UncompressedAssetBundle,
            BuildTarget.StandaloneWindows64);
    }
}

加载

using UnityEngine;
using System.Collections;

public class AssetBundleLoad : MonoBehaviour
{
    private Animator _animator;

    void Start()
    {
        AssetBundle assetBundle = AssetBundle.CreateFromFile(Application.streamingAssetsPath + "/AB.assetbundle");

        GameObject go = assetBundle.Load("ZombieNursePrefab", typeof(GameObject)) as GameObject;

        GameObject man = Instantiate(go) as GameObject;
        _animator = man.GetComponent<Animator>();
    }

    void OnGUI()
    {
        if(GUI.Button(new Rect(0, 0, 100, 30), "idle"))
        {
            _animator.SetBool("run", false);
        }
        if(GUI.Button(new Rect(100, 0, 100, 30), "run"))
        {
            _animator.SetBool("run", true);
        }
        if(GUI.Button(new Rect(200, 0, 100, 30), "attack"))
        {
            _animator.SetTrigger("attack");
        }
        if(GUI.Button(new Rect(300, 0, 100, 30), "dead"))
        {
            _animator.SetTrigger("dead");
        }
    }
}
天道酬勤,功不唐捐!

原文地址:http://www.cnblogs.com/hammerc/p/4832650.html

Unity3d用户手册Mecanim 动画体系运用类人动画装备 Avatar 装备 Avatar 由于 Avatar 是 Mecanim 体系中一个十分重要的方面,所以为模型正确装备 Avatar 至关重要。因而,不论主动 Avatar 创立是不是成功,都需求进入装备 Avatar (Configure Avatar) 形式,以保证 Avatar 有用且正确设置。人物的骨骼布局匹配 Mecanim 预界说的骨骼布局且模型摆成 T 字姿态 (T-pose),这一点十分重要。 阅读详情

相关推荐

Unity3d之骨骼动画

在这个系列,我们将关注Unity引擎提供的基于骨骼动画工具。它的主要思想是为了把它应用到你自己的游戏来介绍和教基本的2D动画原理。在这节课中,我们将添加闲置,跳跃和动画。 在开始这个课程前,我们将感谢Chenguang (DragonBonesTeam)给我们提供用于本系列教程游戏艺术。 离开的地方 在 上一个课程,我们启动项目,合成2D龙角色,然后创建三种不同的动画。如果你还没

zhliu1991的专栏 9270

Unity3D-----Mecanim动画系统

Mecanim动画系统一、Mecanim动画系统的介绍二、Mecanim动画系统的使用1、五个步骤实现Mecanim三、重定向功能的测试四、多个动画的使用以及默认动画的设置1、默认动画(第一个播放)的设置2、多个动画的使用五、代码控制动画播放六、注意问题1、自动旋转问题2、骨骼匹配失败的修复方法 一、Mecanim动画系统的介绍 针对人形角色提供了一种特殊的工作流,包含Avatar的创建和对肌肉的调节。 动画重定向的能力,可以非常方便地把动画从一个角色模型应用到其他角色模型上。 提供可视化Animator

Studious_S的博客 2388

Unity中的Mecanim动画系统与动画状态机

Mecanim动画系统允许开发者创建复杂的动画行为,并使用动画状态机来控制动画的转换和过渡。通过动画状态机和状态之间的转换,开发者可以实现复杂的角色动画逻辑。通过在代码中控制Animator组件,可以触发动画状态的转换和播放,实现更加生动和交互性的游戏体验。通过Animator组件的SetBool()、SetFloat()或SetInteger()方法,可以设置动画状态机中定义的条件的值,从而触发状态的转换。一旦创建了动画状态机并定义了状态之间的转换关系,就可以在代码中控制动画状态的转换和播放。

HsvvDatabase的博客 518

Unity新版动画系统(Mecanim)基础 个人笔记向

Unity中有两套动画系统新:Mecanim动画系统——主要用Animator组件控制动画老:Animation动画系统——主要用Animation组件控制动画(Unity4之前的版本可能会用到)目前我们为对象在Animation窗口创建的动画都会被新动画系统支配有特殊需求或者针对一些简易动画,才会使用老动画系统。

weixin_52402845的博客 2063

使用Mecanim动画系统在Unity3D中创建动画

例如,我们可以创建一个名为"Idle"的动画状态,表示角色的静止状态,然后创建一个名为"Walk"的动画状态,表示角色的行走状态。然后,我们可以添加一个从"Idle"到"Walk"的过渡,并定义一个条件,例如角色的移动速度大于零时触发过渡。使用动画控制器和过渡条件,我们可以根据角色的状态和输入来控制动画的播放。Mecanim动画系统是Unity3D中强大且灵活的动画系统,它提供了一种可视化的方法来创建和控制角色动画。然后,为角色模型创建动画剪辑,可以使用Unity的动画编辑器或导入现有的动画剪辑。

JfiqMaster的博客 558

[Unity3D]Unity3D游戏开发之当仙剑奇侠传遇上Mecanim动画系统

大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.youkuaiyun.com/qinyuanpei。博主总算赶在这个月底写出了这篇文章。这个月因为期末考试一直没时间研究太多关于技术方面的东西,虽然博客一直在更新,可是对于文章的质量博主还是有一个很清楚的认识的。那么,作为这个月的最后一篇文章,今天博主想和大家分享的是关于Unity3D中的Mecanim动画系统。博主很早就想写这篇文章了,可是由

素履独行 | 元培的个人博客 8695

Unity Mecanim 动画系统简介

Unity Mecanim 动画系统

YF云飞的博客 3万+

Unity3D格斗游戏动画系统实战Demo

Unity3D的动画系统历经从到Mecanim的重大演进。Legacy系统采用简单的方式播放剪辑,适合轻量级项目,但缺乏状态管理与复用机制;而Mecanim引入了基于Avatar骨骼映射的统一角色模型标准,支持动画重定向(Retargeting),使同一套动画可在不同人形角色间无缝复用。// Legacy系统典型调用(已过时)// Mecanim系统通过Animator组件控制Mecanim的核心优势在于其参数驱动的状态机系统。

weixin_35732273的博客 1490

Mecanim动画系统

面板位置:Edit-Project Settings-Input Manager在Input Manager中添加自定义按键//使用自定义按键//Speed是自定义按键名注:如果Positive Button等属性不能正常赋值,可能是 值 不规范。

酒精灯的博客 1257

自动驾驶中的多传感器融合实战:用卡尔曼滤波搞定毫米波雷达与摄像头航迹对齐

本文深入探讨了自动驾驶中多传感器融合的实战技术,重点介绍了如何使用卡尔曼滤波实现毫米波雷达与摄像头的航迹对齐。通过分析传感器特性差异、时空同步挑战及工程化实现步骤,提供了包括状态向量定义、观测矩阵设计和故障检测机制在内的完整解决方案,最终实现0.15米以内的高精度航迹对齐。

weixin_28728495的博客 410

迪文DGUSII串口屏中文显示实战:手把手教你制作16x16点阵字库

本文提供了一份迪文DGUSII串口屏16x16点阵中文字库制作的完整实战指南。从显示原理、字体选择与参数设置,到使用FontLib Make工具生成字库文件,再到部署、调用及存储空间优化,手把手教你解决中文显示难题,确保界面文字既美观又稳定。

weixin_29190573的博客 154

Unity3D 4.0新功能:Mecanim动画系统基础教程

作为Unity4.0的主要更新功能,Mecanim动画被寄予了很多的期望。系统有先进的地方,也有不足的地方。这些我们留到最后再来总结。          阿赵粗略的学习了一下,写下以下的教程。这篇教程简单的说明了Mecanim系统的用法和控制方式,里面用到的资源,是从AssetStore里面下载的,如果有兴趣的朋友可以去免费下载。            学习目标:         

仰望星空 2509

从零开始利用MATLAB进行FPGA设计(六)用ADC采集信号教程1

用AN9238采集信号的方法(1),包含PLL、FIFO、ILA的基础教程。

WZT725的博客 3094

【Unity3D】Unity5.6的Mecanim Animator动画系统结合MMD4Mecanim插件舞蹈动画

1.下载MMD4Mecanim 官网:http://stereoarts.jp 我用的是最新版的MMD4Mecanim_Beta_20170423.zip,Unity是5.6.0版本的 2.解压后导入MMD4Mecanim.unitypackage,导入后会报错,这是因为Plugins文件夹下有两个重复文件夹,删除一个,没有就算了。 3.导入PMX/PMD模型,和...

Louis的博客 1万+

SpringBoot+VUE3实战:如何用WebSocket搞定网页端语音通话(避坑指南)

本文详细介绍了如何使用SpringBoot和VUE3结合WebSocket技术实现网页端语音通话功能。从环境配置、WebSocket服务端实现到前端音频处理,提供了完整的开发指南和避坑建议,帮助开发者快速构建稳定高效的实时语音通信系统。

weixin_29021195的博客 221

FPGA实战:MIG IP核AXI接口DDR3读写优化指南

本文详细解析了FPGA中MIG IP核AXI接口的DDR3读写优化策略,涵盖关键参数配置、突发传输技巧及时序收敛方案。通过AXI接口优化和突发长度选择,可实现高达12.8GB/s的理论带宽,提升DDR3访问效率。文章还提供了Vivado配置实例和调试技巧,助力开发者解决FPGA内存控制中的实际问题。

weixin_29168393的博客 545

Unity 3D 动画系统(Mecanim)|| Unity 3D 人形角色动画(Avatar)

是 Unity 公司推出的全新动画系统,具有重定向、可融合等诸多新特性,可以帮助程序设计人员通过和美工人员的配合快速设计出角色动画,其主界面如下图所示。Unity 公司计划采用逐步替换直至完全取代旧版动画系统。

爱编程的鱼的博客 3100

Java 多线程(1)---- 初识线程

前言 多线程想必大家都不会陌生。因为在日常使用和开发中,多线程的使用实在是太常见了。我们都知道,发明多线程的目的是为了更好的利用计算机的 CPU 资源。比如在一个进程中如果只有一个线程(也叫主线程),那么如果当这个线程因为某种原因阻塞(等待用户输入数据等情况)的时候,那么相对应的这个进程也让出了 CPU 资源并暂停执行了。试想一下,如果我们在一个进程中添加多个线程,那么当这个进程中某个线程阻塞的...

指点 1543

Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动画进行整合; 使用状态机来实现动画的播放和切换; 可以实现动画融合和分层播放; 可以通过脚本来对动画播放进行深度控制; 下面我们通过一个图来直观的看看动画的组成结构: Ani...

weixin_34292959的博客 1161

基于FPGA的AGC自适应增益控制系统开发

自动增益控制(AGC)是一种在接收信号过程中自动调整放大器增益的技术,以确保输出信号的幅度保持在一个恒定的水平。基于FPGA实现AGC系统具有高性能、低延迟和高度可配置的特点,广泛应用于无线通信、音频处理和雷达等领域。FPGA上的AGC系统提供了一种高效且灵活的方法来处理变化的信号环境。在实际应用中,通过合理的设计和优化,可以显著提高信号处理系统的鲁棒性和可靠性。

走向CTO的路上... 1694

linux内核学习(一)---内核社区介绍及补丁提交

本系列开始会对linux内核进行系统性的学习,以源码与内核社区为基础,了解前沿的内核机制,同时也深度了解linux内核中的一些经典机制 本章会先对linux内核社区进行简单的介绍,包括源码下载、内核社区的修改提交

文艺小少年的博客 536

Unity3D之Mecanim动画系统

Mecanim动画系统 Mecanim Animation System Date:2013-05-16 07:48 Unity has a rich and sophisticated animation system called Mecanim. Mecanim provides: Unity有一个丰富并且精密的动画系统叫做Mecanim。Mecanim提供了:

LazyChun的专栏 7007

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Unity3d用户手册用户指南Mecanim 动画系统资源准备和导入

资源准备和导入 类人网格 为充分使用 Mecanim 类人动画系统和重定位,您需要有一个搭好骨架及蒙皮的类人网格。 角色模型通常由三维资源包中的多边形组成,或在导出之前从更复杂的网格类型转换成多边形或者三角网格。 为控制角色运动,必须创建一个定义网格内骨骼及它们相互之间运动关系的关节层级或骨架。创建关节层级的过程称为搭骨架。 网格或皮肤必须连接到关节层级,以在动画化给定关节时定义

u014524189的专栏 1123

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Android--获取当前系统时间
下一篇: Android 如何获取应用通知权限
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值