Unity2D之让土豆人动起来
Unity2D功能
Unity3D最新的4.3版本,其中最大的新功能就是这个2D工具了。我这里简单介绍一下这个2D工具是怎样使用的。
首先,在我们创建项目的时候,面板上面多了一个2d和3d的选择,这两个选择有什么不一样的地方呢?

其实这个选项并不重要的,如果选择了2D项目,那么默认创建的摄像机就会变成了正交摄像机,而选择3D项目,默认摄像机会是透视摄像机。这个都是可以在项目里面自己修改的。

而在查看scene的选项里面,多了一个2D的选项,如果启用了,会强制变成2D的视图,如果取消了,会变成我们以前熟悉的3D的scene视图

让土豆人动起来
资源导入和设置
简单的介绍完2D项目选项之后,我们尝试着新建一个2D的项目,然后导入一张官方提供的土豆人图片进去项目里面:

注意看texture type,这里默认选择了就是sprite类型,然后在类型的下面,有一个sprite mode选项,其中默认是single单个图片的,我们将它改成Multiple多个图片的。

这时候,会多出一个sprite editor的按钮。这个sprite编辑窗口,也可以在window/Sprite Editor 菜单中打开。

进去了这个sprite编辑器,看到是这样的。如果你是从window窗口打开,而又没有设置Multiple,这里就算打开了也不能编辑的。必须设置Multiple。

切片Sprite身体骨骼
然后我们就可以直接的用鼠标(按住左键,拉选区域)画出我们想要的范围了:

比如我们先画出一只手的范围,然后会出现一个sprite的属性设置框,我们要做的事情,是给它一个方便管理的命名,然后调整好它的具体范围和中心点。我这里只是一个演示,所以就偷懒没有另外起名字了。

用同样的方法,把角色其余的部件全部画出来,命名好。最后记得要Apply应用一下,这样我们的sprite就生成好了。

土豆人切片骨骼预览
回去看看project窗口里面,会发现这张土豆人的图下面出现了我们刚才绘制的各个部件的sprite

搭建角色Pos
接下来我们尝试着把这些零散的部件组装成一个角色吧,新建一个空的对象(Ctrl+Shift+N),命名为BeanMan
然后把刚才绘制的身体部分拖动到空对象身上:

这时候场景里面就出现了身体的部分了。

Sprite排序
我们再把炮的部分拖进场景里面,但这时候我们会发现,我们本来是想炮在身体后面的,但现在炮把身体挡住了。有没有办法给这些2D的sprite做个排序呢?

排序的地方在这些sprite 的属性里面,有一个排序层的设置,还有一个层内排序的顺序。

我们可以先添加几个排序的层:

排序的方式是越下面的层会挡住上面的。比如这里,Layer2会挡住Layer1,而Layer1又会挡住Layer0。所以我们就可以根据这个角色有多少个大的层级关系,先分配几个层,用于大的排序,然后同一个层里面的排序我们用Order in Layer就可以了

土豆人骨骼预览
用同样的方法,我们把所有部件都拖到空对象上面作为子物体,然后用排序把它们排列好叠加关系。这时候一个土豆人就拼完整了。

给土豆人添加碰撞器
或许我们需要给游戏角色做一个碰撞范围,所以我们可以直接在空对象身上添加一个2D的物理碰撞检测器。


比如我这里给这个土豆人添加了一个box2d的碰撞器和一个circle2d的碰撞器,这样角色的身体刚好就在碰撞的范围内,能被打中的范围就限定在身体了。至于具体的碰撞检测怎样使用,可以去查看一下api的。

让土豆人动起来
有了角色,有了碰撞范围,我们的游戏角色还需要很重要的一个元素,就是动画了。
下面简单示范一下怎样给2D的角色添加动画,还有使用动画状态机
选择父级的空对象,然后打开 Window/Animation编辑面板:
在面板里面,有添加曲线的按钮,有开始编辑动画的按钮,这些操作和新的2D工具没太大关系,都是旧功能,如果不会用,请单独百度这一部分的用法。

点击动画面板的左上角+号,创建一个新的anim动画,比如Run 并保存
然后我们会发现,在project窗口里面会自动的把动画状态机的controller也一起创建了。

我们再创建多几个动画,比如站立、死亡、发射之类:

Meacanim状态机
然后我们点击进入controller,会发现,这些动画片段都已经默认的进入了控制器里面,我们就可以像以前使用Mecanim一样编辑这个2D角色的动画状态转换了。由于这个不是新功能,如果你不会使用Mecanim,可以查阅我以前写的MecAnim使用基础教程。

到这里,新的2D工具使用已经介绍完毕了。我又来说说我的看法。对于2D图片的操作,Unity一直都是弱项来的。就算这次添加了这个新的2D工具,其实也只是提供了一个底层的切割图片编辑器而已,不算什么特别有创新的功能了。论实际应用性来说,这个新功能在以前的版本绝对也能轻易的完全做出来,只是需要自己写编辑器而已了。所以我感觉意义没有想象中的大。而至于用来做UI,我感觉还是差了点,起码实用性比NGUI差了很多。如果你不介意重新写一整套的UI框架,那么你也可以拿这个2D工具来做底层用的。
我比较期待的,还是官方说了N久的新UI系统。还有,我比较期待Unity的官方能更大的开发一些图形绘制的底层功能,这样做自己扩展的功能时会更方便。
但是新版本的NGUI的确是越来越好用了
说明
本文写作内容基于Unity4.3.1版本,但Unity2D功能的核心思路仍适用于Unity4.3更高版本和Unity5.x
本文部分内容参考:http://liweizhaolili.blog.163.com/blog/static/162307442013101791453901/
Unity2D之让土豆人动起来的更多相关文章
- Unity2D Sprite Packer用法介绍
想充分利用图片空间? 我们用来做sprite的图片通常会留有很多空白的地方,我们在画完了sprite之后,这些地方很可能就没有什么作用了. 如果想避免这些资源上的浪费,我们可以把各个sprite做成图 ...
- "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案
今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...
- html和css
html css 和js说明 1.什么是html? HTML(HyperText MarkUp Language)超文本标记语言,通过使用标记来描述文档结构和表现形式的一种语言,由浏览器进行解析,然后 ...
- (DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法
这周开始发现一个很让人抓狂的现象,QQ音乐网页(http://y.qq.com)与QQ视频(http://v.qq.com/)网页打开超慢,甚至是无法打开,严重影响了业余的音乐视频生活. 以QQ视频为 ...
- 前端相关html和css
#请参考http://www.cnblogs.com/pycode/p/5792142.html #html css 和js说明 ##1.什么是html? HTML(HyperText MarkUp ...
- Java类WebServer及中间件拿webshell方法总结
0.序 原文名称:Tomcat.Weblogic.JBoss.GlassFish.Resin.Websphere弱口令及拿webshell方法总结 原文from:http://www.hack80.c ...
- WebBrowser内核指定
一.背景 这几天在维护公司的一个项目,嗯…到现在七八年没人动过了(也是老古董了),都说N年前的代码碰不得 处处是坑 不能挖坑还得一步一步的填坑,恰好今天就填了一坑 此处作为记录 供以后翻阅,对代码除了 ...
- [WPF]设置背景色
程序效果 最终得到程序的运行效果如图.拖动Slider可以使按钮的背景色出现相应变化. 需求分析和架构设计 如果是你,接到了这样的一个程序设计要求,会怎样思考?第一步当然是需求分析啦.这个程序相对简单 ...
- arpg网页游戏之地图(一)
[转]http://www.cnblogs.com/BlueWoods/p/4681572.html?from=timeline&isappinstalled=1 开发arpg网页游戏一项比较 ...
随机推荐
- 设计模式之桥接模式(Bridge)
注:本文不属于原创,而是根据原文重新整理,原文是:我给媳妇解释设计模式:第一部分 设计模式不是基于理论发明的.相反,总是先有问题场景,再基于需求和情景不断演化设计方案,最后把一些方案标准化成“模式”. ...
- ajax提交复杂对象数据
public class RouteItemManageReq { private List<WorkNodeReq> targetNodes; private RouteItemReq ...
- Android5.0新特性——全新的动画(animation)
全新的动画 在Material Design设计中,为用户与app交互反馈他们的动作行为和提供了视觉上的连贯性.Material主题为控件和Activity的过渡提供了一些默认的动画,在android ...
- [WP8] ListBox的Item宽度自动填满
[WP8] ListBox的Item宽度自动填满 范例下载 范例程序代码:点此下载 问题情景 开发WP8应用程序的时候,常常会需要使用ListBox作为容器来呈现各种数据集合.但是在ListBox呈现 ...
- C#获取本地系统日期格式
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
- Arcengine实现创建网络数据集札记(一)
一 引子 网络数据集,GIS空间分析基础的理论和知识,是最短路径分析.连通性分析等其他空间分析技术的数据基础. 以往,网络数据集的研究很少,此次项目开发过程中,对网络数据集以及arcengine创建网 ...
- 【读书笔记】iOS-UIWindow-密码框
一,工程结构,如下图所示: 二,代码 PasswordInputWindow.h #import <UIKit/UIKit.h> @interface PasswordInputWindo ...
- 初识UIScrollView
RootView.m #import "RootView.h" #define YHColor [UIColor colorWithRed:arc4random() % 256 / ...
- centos性能监控系列三:监控工具atop详解
引言 Linux以其稳定性,越来越多地被用作服务器的操作系统(当然,有人会较真地说一句:Linux只是操作系统内核:).但使用了Linux作为底层的操作系统,是否我们就能保证我们的服务做到7*24地稳 ...
- JRE与JDK的区别
转自:http://swiftlet.net/archives/639 1. 定义JRE(Java Runtime Enviroment)是Java的运行环境.面向Java程序的使用者,而不是开发者. ...