http://bbs.9ria.com/thread-401613-1-1.html

by Orlando
Pereira and PedroPereira
3 days ago2
Comments

在这节课中,我们将关注Unity提供的bone-based 2D动画工具引擎。它的主要思想是为了把它应用到你自己的游戏来介绍和教基本的2D动画原理。在这次上,新建项目,定义assets,和做动画的初步准备。

在开始这个课程前,我们将感谢Chenguang (DragonBonesTeam)给我们提供用于本系列教程游戏艺术。

本教程给谁呢?

本课程主要针对两组游戏开发人员:

  • 那些一点都不数学Unity的。
  • .那些熟悉Unity,但不熟悉Unity2D引擎和工具的。

假设你已经拥有一些编程的技巧,所以我们不需要深入讨论到编程里面的代码。为了跟谁这个课程的脚步,我们当然会需要下载Unity

开始快速使用Unity,按照我们上一个课程 ,介绍Unity2D的环境及其工具的特征。

最后预览

这个demo展示了我们要目标龙的动画:

项目启动

启动Unity和通过从 File 菜单中选择New Project... 新建项目。Project
Wizard将出现。现在,新建一个新的2D项目,接着新建一个叫Sprites的文件夹。(在你的Assets目录下)。

现在你已经有了建好的项目文件夹,接下来就要导入游戏资源。你可以在 Assets文件夹的 GitHub的本节报告中找到它们。(如果你不熟悉GitHub的话,你只需要在最近页面中点击下载ZIP 。)注意,这个文件包括整个系列教程的Asstets文件,所以有一些现在不会用上,但在后面用上。

骨骼动画vs精灵图集

先继续之前,比较下面两张图片




在第一张图片中,龙被分为若干身体部位(头,身体,手臂等等)。第二幅图,一个忍者所示的几个姿势,姿态不同的动作序列。这让你更清楚的想象一下《阿凡达》在你的游戏中是如何制作。

忍者精灵就是我们说的一张精灵或者精灵图集。这类型的精灵在传统的2D游戏中相当受欢迎,到了今天,它还是很常见。

这个龙精灵取药最近的2D动画技术,通常被称为bone-based动画。顾名思义,动画将在一个骨骼的基础上,每个身体骨骼可以有一个特定的动作或者动画。所有身体被分割的主要部分特点允许开发人员直接在引擎上创建动画。

在这个课程中,我们将关注bone-based动画。然而,注意Unity的bone-based动画并不如此,所以我们将模拟。

准备动画需要的精灵

在Sprites 文件夹中拖拽精灵到编辑器,就像这样:

在任何角色的准备动画之前,你需要添加项目的一个场景。在Assets 目录下,创建一个Scenes 文件夹,接着创建一个新的场景,然后在这个文件夹中另存为Test.scene。在这最后一步中,你应该是这样的:

现在,仍然在Project 选项卡中,选择dragon 精灵,接下来在Inspector 面板中看:

你可以在Inspector里面的 Sprite Mode属性看到,Sprite
Mode设置是Single。这意味着当创建一个新的精灵,引擎将使用整个结构作为一个整体。因为我们有龙的身体分开部位,我们不希望这种情况发生。因此,我们需要把Sprite Mode模式从Single 改为Multiple。

当你改变选项的时候,在Sprite Editor 标签出现一个新的按钮:

目前,在Sprite Editor切片工具不能压缩图像。为了确保这个是这些动画精灵的最好结果,你需要改变在Inspector 选项卡的底部Format 值,由默认的Compressed选项改为Truecolor。然后点击Apply。

现在,选择龙精灵,接着点击 Sprite Editor按钮。一个新的窗口就会弹出来:

在窗口的左上角,你可以找到一个Slice 按钮。点击它,另一个菜单就会弹出来:



这个菜单允许你改变如何将精灵切片的引擎参数。如果你设置切片的参数为Automatic,引擎将尝试检测不同部分特征的图像。你可以在切片中定义最小的尺寸,支点(一个围绕切片旋转的点)和三种方法之一:

  • 删除现有的将取代任何现有的切片
  • 智能将尝试创建新的切片,同时保持或调整现有的。
  • 安全将添加一个新的切片,无需删掉原先的切片。

你也可以设置Type 参数为Grid。这将会给你其他选项:

在自动模式下,你可以选择精灵的走心点,但你也要定义像素大小的选项。这个值决定了面砖的高度和宽度像素。

在这个特定的图像,选择自动模式和点击切片按钮。结果应该类似这样:


正如你所看到的,编辑切片的各个部分的精灵成了不同的矩形。这些都是你构建角色使用到的部分。正如上面提到的,这不是完美的骨骼动画,但每个部分的动画是独立的。

如果你双击一个生成的举行,会弹出精灵的特定部位的属性面板。

你的修改生成的精灵的名字,位置,尺寸和轴心点。你也可以通过拖拽矩形的顶点蓝色点来改变位置和大小。蓝色的圆圈的中心为选定矩形表示的轴心点。

对于这个精灵,让Unity自动创建单独的精灵是安全的。然而,在一些更复杂的精灵,你可能要手动定义精灵。你可以通过点击和拖动鼠标左键在一个图像来定义一个长方形。

一旦释放鼠标,Uinty将会从矩形中创建一个新的精灵。

你能点击Trim 按钮来调整精灵的矩形。接着,只要重复这个过程来生成你想要的所有精灵。

自动模式的切片对这种图片来说挺不错的,你不需要手动定义精灵。

调整中心点

接下来是调整各个生成的精灵的中心点。这个步骤对于这个动画非常重要。

基本上,我们需要拖拽精灵区域中心点,将它加入到父对象的身体部位。举个例子说明,你想要移动靠近脖子区域的头部支点。这将确保,动画角色时,所有动作,例如旋转,将是围绕这个点旋转,允许以现实的方式移动角色。如果你离开了中心点原来的区域,最终你会奇怪这个动画,因为这个角色将无法按现实的方式移动。

幸亏有中心点这个成员作为娃娃的关节。为了让娃娃移动,这个关节必须正确的放置,对吧?同样的规则应用于中心点。

移动中心点,通过拖拽每个精灵中心蓝色的圆圈到正确的位置(就是应该链接的父对象的部位)。在下图可以看到头部的中心点在它的正确地方:

尾巴部位看起来像这样:


你还有其他好主意吗?非常好!给剩下的部位重复这个过程。(你可以把黑色的中心点放在它的中心,我们将在下一节中解释更多关于这方面的内容。)记住,你想要龙的动画,不是《弗兰肯斯坦》的动画。

一旦完成,点击Applay按钮:

如果你快速的看一下你的精灵文件夹,你可以看到精灵现在旁边有一个箭头:

点击箭头,你可以看到所有的部分单独构成我们龙的角色:

组装这个角色

现在你有切片分成不同精灵的角色,你可以开始把精灵放到场景。因为龙是由几个身体部位,所以需要构建角色。

首先,把龙精灵的黑色点拖拽到场景。这个对象将作为角色的重心工作。接着,你要集中注意力,然而,现在,就知道这个你的角色。

现在,龙身上的黑点,如下所示:


重复这个过程直到将龙组装好。到最后看起来像下面展示的样子:


最后,你已经有一只龙了—然而,有一点你需要注意,他看起来怪怪的。一些身体部分应该在身体下面或者相反。这种原因的产生是因为我们添加龙的部分没有按照特定的顺序。

在解决这个问题之前,让我们把龙精灵转化成一个单一的游戏对象。你可能已经注意到了,现在龙的几个部分作为一个单一的游戏对象—你需要组成一个游戏对象,然后就可以开始制作动画。

为了正确的组成所有精灵,使用精灵的黑点来组成主要的游戏对象;所有其他的身体部位应该在这个精灵的下面。只要拖拽精灵到精灵的黑色点的层级上来组织它到黑点下面。

在下面的图片,你可以看到精灵图层层次结构应该类似于后分组游戏的对象。


在继续之前,重命名你的基本游戏对象名为Dragon。但你移动Dragon游戏对象,你能移动场景中角色的所有部分。

但如果你想只移动一个精灵呢?举个例子,如果你想移动手,你知道的,手臂和手是连接在一起的,所有,当你移动它是,所有手也会跟着一起移动,对吗?如果你想这样做,你会发现并非如此。当选中手臂,然后移动它,其他的部分依旧在身体的那个部位上。所以,为了移动所有的身体部位,你需要在你的精灵里创建一个新的图层。

为了是过程更直观,重命名身体部位(通过右击选中重命名)与各自的名字,像这样:


对于层级结构,想到角色像一棵树,有树根,树干和树枝。黑点像树根;当它移动,所有的身体部位移动。在根主干,在这种情况下,你的树干就像是身体这个角色,所以这是层级结构的下一个精灵。然而,你仍然还有分支的分支,举个例子,在尾巴图层—Tail的分支是Tail Tip等等。

在下面的层次结构中,组织所有角色的精灵:

 

现在,如果移动Upper arm,所有的手臂都会跟着移动,是不是非常好?

重新排序精灵

在你可以开始动画角色之前,还有最后一个细节需要我们注意一下。正如我们讨论的,精灵部分没有按照正确的顺序画出。为了解决这个问题,你必须改变每个单独精灵图层的顺序参数。

 

为了确保本教程成功,请为每一个精灵使用下列值:

  • 龙:0
  • 身体:3
  • 头部: 4
  • 左腿: 4
  • 左上臂: 5
  • 左臂:4
  • 左手:5
  • 右腿:1
  • 右上臂: 2
  • 右臂:1
  • 右手:2
  • 尾巴:4
  • 尾巴尖端:5

最后,你的龙应该是这样的:

 

为了完成这个部分,使你的角色在场景中心。通过改变Transform 值的中心坐标为(0, 0, 0)。

下一回

本系列的第一部分总结。现在你有一个2D的角色和正确的精灵顺序和层次结构。

到目前为止,如果你有任何问题或反馈,可以再下面发表评论。

参考资料

原文链接:http://gamedevelopment.tutsplus.com/tutorials/bone-based-unity-2d-animation-introduction--cms-21364

翻译词数:2234

图片23.png (179.5
KB, 下载次数: 3)

图片22.png (164.06
KB, 下载次数: 6)

图片21.png (105.38
KB, 下载次数: 6)

图片20.png (62.87
KB, 下载次数: 3)

图片19.png (45.31
KB, 下载次数: 3)

图片18.png (160.19
KB, 下载次数: 0)

图片17.png (145.04
KB, 下载次数: 3)

图片16.png (175.24
KB, 下载次数: 6)

图片15.png (164.89
KB, 下载次数: 3)

图片14.png (178.75
KB, 下载次数: 0)

图片11.png (178.84
KB, 下载次数: 3)

图片10.png (173.84
KB, 下载次数: 0)

Unity2d 骨骼动画1:介绍的更多相关文章

  1. Unity2d 骨骼动画3:介绍Mecanim和脚本

    http://bbs.9ria.com/thread-402710-1-1.html 在这个系列,我们将关注Unity引擎提供的基于骨骼动画工具.它的主要思想是为了把它应用到你自己的游戏来介绍和教基本 ...

  2. cocos2dx骨骼动画Armature源码分析(三)

    代码目录结构 cocos2dx里骨骼动画代码在cocos -> editor-support -> cocostudio文件夹中,win下通过筛选器,文件结构如下.(mac下没有分,是整个 ...

  3. cocos2dx骨骼动画Armature源码分析(二)

    flash中数据与xml中数据关系 上篇博文从总体上介绍了cocos2dx自带的骨骼动画,这篇介绍一下导出的配置数据各个字段的含义(也解释了DragonBone导出的xml数据每个字段的含义). sk ...

  4. cocos2dx骨骼动画Armature源码分析(一)

    源码分析一body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-to ...

  5. 引擎设计跟踪(九.14.2b) 骨骼动画基本完成

    首先贴一个介绍max的sdk和骨骼动画的文章, 虽然很早的文章, 但是很有用, 感谢前辈们的贡献: 3Ds MAX骨骼动画导出插件编写 1.Dual Quaternion 关于Dual Quatern ...

  6. CSharpGL(50)使用Assimp加载骨骼动画

    CSharpGL(50)使用Assimp加载骨骼动画 在(http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html)介绍了C++用Asism ...

  7. Unity骨骼动画资源解析与优化

    一,背景 最近发现项目的动画文件有点大,不光内存大,而且文件也很大,所以从这2个方面下手处理 二,动画文件大小优化 为了优化动画文件大小,我们可以先分析下文件,Ctrl+D将动画文件从FBX拷贝出来, ...

  8. Spine Skeleton Animation(2D骨骼动画)

    骨骼动画 首先我们来看到底什么是骨骼动画: 在早期的机器上,渲染本身已经占用了很多CPU资源,因此,对于渲染,往往采取的是一种空间换时间的策略,以避免在模型的渲染中继续加重CPU的负担.帧动画模型在这 ...

  9. Axiom3D:Ogre动画基本流程与骨骼动画

    在Axiom中,Animation类用于管理动画,在此对象中主要管理着AnimationTrack对象,此对象用于管理动画的各种类型的每一桢.在Axiom中,动画类型主要有变形动画,姿态动画,骨骼动画 ...

随机推荐

  1. [转]***换机房换ip之后不能连外网

    ***换机房换ip之后不能连外网 时间 2015-07-21 15:17:16  Wendal随笔 原文  http://wendal.net/2015/07/21.html 主题 iptables ...

  2. Phoenix 索引生命周期

    本文主要介绍Phoenix索引状态的生命周期,帮助大家解惑“为什么我的phoenix索引不能正常使用了?” 索引状态 索引总共有以下几个状态,其状态信息存储在SYSTEM.CATALOG表中.可以通过 ...

  3. requests 中文乱码

    jsUrl = 'http://www.heze.cn/qiye/index.php?a=userinfo&username={}'.format(bizQiyeId)r = requests ...

  4. javascript JSON.parse和eval的区别

    SON.parse()用来将标准json字符串转换成js对象:eval()除了可以将json字符串(非标准的也可以,没有JSON.parse()要求严格)转换成js对象外还能用来动态执行js代码.例如 ...

  5. Android App 启动 Activity 创建解析

    继承实现类关系: ActivityThread  thread = new ActivityThread(); Context->ContextImpl   ContextImpl contex ...

  6. Android 启动过程介绍【转】

    本文转载自:http://blog.csdn.net/yangwen123/article/details/8023654 一般开机过程大致可以分为三个大阶段: 1. OS级别,由bootloader ...

  7. 手写Future模式

    根据前面我所说的Futrue模式,手写一个: 分别对应的Java代码,大家拿来参考: package FutureTest; //公共data数据接口 public abstract class Da ...

  8. 关于Javascript中声明变量、函数的笔记

    一.概念 1.变量声明 在JavaScript中,变量一般通过var关键字(隐式声明,let关键字声明除外)进行声明,如下通过var关键字声明a,b,c三个变量(并给其中的a赋值): var a=1, ...

  9. Git基本用法2

    二.比较内容 1.比较提交 - Git Diff 现在我们对项目做些修改: $ cd gitproject # 向README文件添加一行 $ echo "new line" &g ...

  10. 用php描述二分查找法

    //二分查找 $arr = array(0,1,2,3,4,5,6,7,8,9); function bin_sch($array, $low, $high, $k){ if ($low <= ...