精华内容
下载资源
问答
  • unity2d水模拟

    2020-05-22 03:30:51
    unity2d水模拟
  • Unity环境无缝集成工具Unity 2D Toolkit;Unity环境无缝集成工具Unity 2D Toolkit;Unity环境无缝集成工具Unity 2D Toolkit
  • unity2d阴影Demo

    2018-10-09 10:38:56
    unity2d动态阴影 原创方法
  • Unity2D卡通游戏地图

    2018-06-08 13:00:04
    Unity2D卡通游戏地图,内含多个游戏地图、场景 Unity2D卡通游戏地图,内含多个游戏地图、场景
  • unity 2d绳索插件

    2018-07-24 14:53:02
    超级无敌非常好用的unity2d绳索插件 可做起重机等等等
  • Unity2D 水波效果

    2016-03-18 11:05:00
    Unity2D 实现水波效果
  • Unity 2D 入门

    万次阅读 多人点赞 2017-07-14 13:34:43
    原文:Introduction to Unity 2D 作者:Sean Duffy 译者:kmyhy 3/15/17 更新说明: 升级至 Unity 5.5。Unity 是一个非常流行和强大的游戏引擎,它支持众多的平台和设备。尽管 3D 游戏最近火热,大部分手机游戏、...

    原文:Introduction to Unity 2D
    作者:Sean Duffy
    译者:kmyhy

    3/15/17 更新说明: 升级至 Unity 5.5。

    Unity 是一个非常流行和强大的游戏引擎,它支持众多的平台和设备。尽管 3D 游戏最近火热,大部分手机游戏、控制台和桌面游戏仍然是以 2D 方式呈现的,因此学习用 Unity 编写 2D 游戏仍然非常重要。

    在本教程中,你将编写一个 2D 太空登陆游戏, 并学到如下技能:

    1. 如何使用精灵和相机。
    2. 如何使用物理 2D 组件处理碰撞和玩法。
    3. 如何创建 2D 动画和状态。
    4. 如何使用图层和精灵的 order。

    如果你还没安装 unity 5,请从 Unity 官网下载它。

    注意:如果你是第一次接触 Unity,你可以看看我们的《Intro to Unity 教程》 ,以便加快你的学习进度。

    开始

    从这里下载本教程的开始项目,解压缩,用 Unity 打开 LowGravityLander-Start 项目。

    在项目窗口中,打开 Scenes 文件夹下的Lander-Start 场景。你会在 Game 视图中看到:

    Lander-start-scene-game-view.png

    开始项目已经能够运行,但你还需要解决几个问题才能真正完成它。

    准备发射(当在着陆点着陆时更是危机四伏)!让我们开始吧!

    注意:对于 Unity 2D 游戏,Unity 编辑器会自动处于 2D 模式。当你创建新项目时,可以选择 2D 或 3D 模式:

    new-unity-project-unity2d-e1482143259394.png
    在开始项目中已经设置好这个选项了。

    精灵

    通过 Unity 强大的 2D 引擎和内置编辑器,我们很容易使用精灵。

    要向游戏中添加精灵,从项目文件夹中将它拖到你的场景视图即可。这真的很简单,打开场景视图,然后从 Sprites 文件夹中,将 playership 精灵图片拖到你的场景视图。

    drag-playership-sprite-unity2d.gif

    在结构视图中,点击 Unity 为你创建的 playership 游戏对象,在检视器中查看它的属性。注意 Unity 会自动添加一个 Sprite Renderer 组件到游戏对象中,这个组件包含了你的 playership 图片:

    sprite-inspector-unity2d.png

    OK!Sprite Renderer 允许你将图片用做 2D/3D 场景中的精灵。

    从结构视图中删除 playership 游戏对象。

    Sprite Modes

    在 Assets/Sprites 文件夹中选中一个精灵图片。在检视器中,你可以有三种不同的模式来使用这个精灵:

    sprite-mode-selection-unity2d.gif

    • Single: 只有一张图片的精灵。
    • Multiple: 使用多张图片的精灵,比如动画或精灵表单(spritesheet,同一个角色图片由多个图片组成)。
    • Polygon: 自定义精灵的多边形形状,你可以用各种原始形状来创建,比如:三角形、方块、五边形、六边形等等。

    一个精灵表单是一张包含多个更小图片的单张图片,比如:

    thruster-spritesheet1.png

    使用精灵表单的原因是游戏中用到的每一张图片都会占用一次绘制动作。当精灵图片非常多时,这会产生非常大的负担,而且你的游戏会变得复杂臃肿,导致潜在的问题。

    通过精灵表单,你可以在一次绘制中绘制多个精灵图,提升游戏性能。当然,在精灵表单中如何组织这些精灵图是一个学问,那就是另一篇教程的事情了。

    精灵编辑

    将多张图片放到一张图片是很有用的,这样就可以用于动画或者允许对象拥有多个动作。通过 Unity 的 2D 精灵表单编辑器,能够轻易管理这些精灵表单。

    在这个游戏中你将用到两个精灵表单:一个用于登陆舱的推进器动画,一个用于爆炸效果。这两个动画都由多个播放帧组成,你可以用精灵编辑器编辑和分割它们。

    explosion-spritesheet.png 是用于爆炸效果的,它已经切分好了, 但 thruster-spritesheet.png 图片仍然需要处理,这是你接下来的工作。

    在项目窗口的 Sprites 文件夹中点击 thruster-spritesheet.png。在检视器中,它的 Sprite Mode 已经是 Multiple 了(如果不是,请修改为 Multiple 并点击 Apply)。

    然后,点击 Sprite Editor:

    sprite-editor-thruster-spritesheet-unity2d.png

    弹出一个窗口,显示了自动切分成多个帧的精灵表单(下图中的数字是方便演示而添加的,不是截图中的内容):

    IndividualFrames.png

    点击窗口左上角的 Slice,你会看到默认的切分动作是 Automatic:

    Lander-default-sprite-slice-settings.png

    Automatic 表示 Unity 会自动搜索并切分你的精灵表单,以它自己的方式。但你也可以以 cell size 和 cell count 方式来切分你的精灵表单。

    选择 cell size 将允许你以像素单位的方式来指定每一帧的大小。

    在精灵编辑器中,点击 Slice 菜单下面的 Grid by Cell Size:

    GridByCellSize.png

    在 Pixel Size,将 X 设为 9,Y 设为 32。将 Pivot 设为 Center,其它值保持为 0,然后点击 Slice:

    Lander-sprite-editor-slicing.png

    点击精灵编辑器窗口的 Apply,将修改应用到精灵表单:

    SpriteEditorApplyButton.png

    这就完成了——你可以关闭精灵编辑器了。推进器的精灵表单已经就绪。

    将精灵赋给登陆舱

    现在,还不能在游戏中看到登陆舱。因为它还没有被添加上任何 Sprite Renderer组件。不会有任何壮观的着陆场景——或者坠毁效果!——如果登陆舱甚至不能在屏幕上看到的话。

    要解决这个问题,点击结构视图中的 Lander 游戏对象。在检视器中,点击 Add Component,在搜索栏中输入 Sprite Renderer。然后,选中 Sprite Renderer 组件,在组件属性中点击 Sprite 右边的圆圈,选择 playership 精灵图片:

    Lander-add-sprite-renderer-component-600px.gif

    将 Order in Layer 设置为 1。

    接下来的工作是设置起落架的精灵图。
    在 Lander 游戏对象下方,选择 LanderFeet 游戏对象,然后点击 Sprite Renderer 组件中 Sprite 选择器右边的小圆圈。然后从 Select Sprite 窗口中选择 lander-feet 图片:

    select-lander-feet-unity2d.png

    点击 Play;你可以在游戏视图中查看你的登陆舱了。通过 WASD 或者箭头键在屏幕上移动:

    Lander-Houston-we-have-liftoff.png

    2D 镜头和单位像素

    Unity 2D 项目默认带有一个正交视图相机。

    在 2D 游戏中,通常你会用这种相机而不是透视视图相机。接下来你会了解正交视图和透视视图的区别。

    下图显示了 Lander 项目中的默认的相机设置:

    Lander-default-camera-orthographic-settings.png

    注意,Projection (投影)属性现在是 Orthographic(正交)。

    在项目窗口中,选择 playership 精灵图,然后在检视器中查看它的 Import Settings。在 Pixels Per Unit(单位像素)属性中,当前默认为 100:

    player-ship-sprite-pixels-per-unit-unity2d.png

    这里的 100 是什么意思呢?

    术语:单位像素

    在 Unity 中“单位”一词不一定和屏幕像素对应。相反,你的对象的大小只是相对于其它对象的,它可以是任意大小,比如:1 个单位 = 1 米。对于精灵图片,Unity 用“单位像素”来定义它们以“单位”计算的大小。

    假设有一张精灵图,是一张 500 像素宽度的图片。下表显示了当绘制这个精灵时,在不同的缩放系数以及不同单位像素时,它的 x 轴上的宽度的变化:

    Screen-Shot-2015-10-18-at-8.00.36-PM.png

    还是没看懂?下面会对这个计算过程进行说明:

    假设有一个游戏,使用了静态相机来全屏显示背景,就好像电脑桌面上的墙纸。

    backdrop.png 的高是 2048,默认单位像素是 100。如果你稍微心算一下,就会知道在结构视图中的游戏对象 backdrop 的高度是 20.48 个单位。

    当然,正交相机的 Size 属性会将屏幕高度折半,因backdrop 游戏对象的真实高度应当也经过直角转换,即 10.24:

    ExplainPixelPerUnit2.png

    当然,你不需要修改项目中的相机,因为当前的 Size 为 5 ,对于这个游戏中的移动相机来说刚刚好。

    星系

    在精灵的 Import 设置中有一个 Max Size 属性,允许你指定精灵的最大尺寸,单位为像素。你可以根据目标平台来修改这个设置。

    放大一下背景是淡蓝色星系的场景视图。注意它有一点模糊;当你导入一张精灵图片时,Max Size 属性默认是2048。Unity 会将图片缩小以适应默认的纹理尺寸,这会导致图片质量下降。

    要解决这个问题,在项目窗口中选中这张 backdrop 图片,勾选 Override for PC、Mac & Linux Standalone,然后将 Max Size 修改为 4096。点击 Apply,然后 Unity 会花几秒钟重新导入这张图片到场景视图中。你会发现背景突然变得清晰明锐了:

    max-size-change-to-4096.gif

    将 Max Size 设为 4096 将告诉 Unity 用 4096x4096 大小的纹理贴图,这样你就可以看出原图的细节显示。

    但是,这确实会付出一些代价。查看下图中的检视器的的预览区域;背景贴图的大小现在是 4 M,而原来是 1 M。

    texture-change-file-size-increase.png

    纹理贴图的大小增加后,会使它的内存暴增 4 倍。

    值得注意的是,根据 Unity 所支持的平台的不同,可能会有针对其它平台的 Override 设置。如果你准备将游戏编译到这些平台时,你可以使用这些 Override 设置,从而在不同的平台上使用不同的大小和格式。

    注意:4096x4096 是十分大的图片文件了,尽可能避免使用这么大的文件,尤其是对于手机游戏来说。这个项目中只是为了演示才使用这么大的图片。

    贴图

    你还可以修改贴图的格式:

    format-change-settings.png

    你可能想修改某些贴图的格式,以提升图像质量,或者压缩它们的大小,但这要么会增加图片在内存中的占用,要么会降低图片的保真度。最好是理解每个参数的作用,尝试修改它们并比较贴图最终的尺寸和质量。

    将 Use Crunch Compression 设置为 50% 的压缩时间会长一点,但文件尺寸会变得最小,当然你后面仍然可以调整它。

    将 backdrop 的 Import 设置改回之前的内容,然后再修改 Format 和 Crunch Compression 设置,然后点击 Apply。

    final-backdrop-texture-settings.png

    在开发你自己的游戏时,你可以尝试不同的压缩率以在最小大小和质量之间找到一个结合点。

    2D 碰撞和物理

    Unity 中你可以像在 3D 游戏中一样修改 2D 物理引擎的重力。对于新项目 Unity 默认将重力设置为地球重力,也就是 9.80665 m/s2。但如果你将飞船降落在月球上,而不是地球上,则重力就应当是地球重力的 16.6%,也就是 1.62519 m/s2

    注意:在开始项目中,重力被设置为 -1,以便你更容易起飞和测试游戏。

    要修改游戏的重力,点击 Edit / Project Settings / Physics 2D 然后用 Physics2DSettings 检视器面板将重力的 Y 值从 -1 修改为 -1.62519:

    Lander-moon-gravity-Physics2D.png

    点击 Play,运行游戏,四处飞一下,看看重力对你的飞船的移动有什么影响:

    Lander-build-and-run-gravity-pulling-down.png

    碰撞

    如果你曾经试过引导登陆舱,那么你也可能碰到过一两块岩石了。这是因为 Unity 的 2D 碰撞系统生效了。

    每个会受重力和其它物体影响到的对象,都需要拥有一个 2D 碰撞体组件和一个 2D 刚体组件。

    在结构视图中选中 Lander 这个游戏对象;你会看到它带有有一个 2D 刚体和一个 2D 多边形碰撞体组件。在一个精灵上添加一个 2D 刚体组件将让它接受 Unity 2D 物理系统的管理。

    rb2d-and-polygon-collider2d-unity2d.png

    物理组件的简单介绍

    一个 2D 刚体组件表示重力将对这个精灵产生作用,你可以在脚本中通过力来控制这张图片。如果你想让这个精灵受其它对象影响并和其它对象发生碰撞,你还需要添加一个 2D 碰撞体。添加碰撞体组件将使精灵能够响应和其它精灵发生的碰撞。

    多边形 2D 碰撞体相对于其它简单的碰撞体,比如盒子碰撞体或圆形碰撞体来说,要耗费更多的性能,但它能和其它物体发生更精确的碰撞。尽可能地使用最简单的碰撞体能够确保你达到最佳性能。

    碰撞多边形

    在你的飞船上尝试一下碰撞体,从结构视图中选择 Lander 游戏对象,在 Polygon 2D Collider 中点击 Edit Collider:

    EditColliderButton.png

    在场景视图中,将鼠标至于碰撞体的边沿;当手柄出现,你可以移动碰撞体的端点;也可以添加或删除端点,从而改变碰撞体的形状:

    Lander-edit-polygon-collider2D.gif

    现在,将 Lander 的碰撞体恢复原样。

    注意:在 Lander 游戏对象附属的 Lander.cs 脚本中,我们用 OnCollisionEnter2D 去处理和其它对象的碰撞。如果碰撞力超过某个设定值,登陆舱就会坠毁。

    你的降落坐垫也需要一个碰撞体;不然的话在着陆的时候你的飞船会直接落下。

    在结构视图中,双击 LanderObjective 游戏对象,让降落坐垫居中显示。在检视器中,点击 Add Component,选择 Box Collider 2D 组件:

    Lander-box-collider-2D.png

    Unity 会为 LanderObjective 游戏对象添加一个盒子 2D 碰撞体组件,并自动将碰撞体的大小设为和精灵图的大小一样。很好!

    Lander-box-collider-on-landing-platform.png

    对于刚体和 2D 碰撞体组件,有几点需要注意:

    • 如果你想在移动物体时应用变形组件,而不是只有重力能够作用它,可以将刚体的 body type 设为 Kinematic。要保持让它们受 Unity 重力控制,使用 Dynamic。如果要让它们根本不可移动,设为 Static。
    • 还可以修改刚体组件的质量,线性阻力、角阻力和其它物理属性。
    • 碰撞体可以用于 Trigger 模式;在这种模式下,它们不会和其它物体发生物理碰撞,而是允许你用代码在所有 MonoBehaviour 脚本中都有效的 OnTriggerEnter2D() 方法来响应事件。
    • 要在你的脚本代码中处理碰撞事件,可以用 OnCollisionEnter2D() 方法。这个方法在所有 MonoBehaviour 脚本中都是可用的。
    • 可以为碰撞体分配一个可选的 Physics2D 材质,以控制反弹属性或摩擦属性。

    注意:当游戏中只有几个对象的时候,你可能没有注意到,如果屏幕上有数以百计的对象时都参与物理作用时,用更简单的碰撞体形状将大大提升游戏性能。

    Lander-lots-of-collisions.png

    如果有大量对象发生碰撞时,你可能不得不重新审视一下使用多边形碰撞体组件的策略。

    登陆舱动画

    你的登录器还不算完,因为还缺少一个看得见的推进器向上助推的效果。现在推进器已经有了,但看不出它喷火的效果。

    Unity 动画 101

    要为游戏对象增加动画效果,需要为这个对象添加一个包含所需动画的 Animator 组件。这个组件需要引用一个 Animation Controller,这个 Controller 定义了将要使用的动画剪辑,以及这些剪辑的控制方式,以及其它“发烧级”特效,比如混合和动画的过渡。

    推进器的动画控制器

    在结构视图中,展开 Lander 游戏对象,显示出 4 个下级对象。选择 ThrusterMain 游戏对象,你会看到已经有一个 Animator 组件在上面了,但它还没有对应的动画控制器:

    Lander-animator-component-no-controller-reference.png

    仍然在 ThrusterMain 游戏对象,点击 Animation 编辑器标签。如果在编辑器主窗口中看不见这个标签,请点击 Window 菜单,然后选择 Animation:

    CreateAnimationWindow.png

    点击 Create 按钮,创建一个动画剪辑:

    Lander-to-begin-animating.png

    名字输入 ThrusterAnim,位置选择 Assets/Animations 文件夹。

    你会在项目窗口的 Animations 文件夹看到 2 个新的动画资源。ThrusterAnim 这个动画剪辑中保存了推进器的动画,ThrusterMain 则是控制这个动画的动画控制器:

    Lander-animation-assets-created.png

    在动画窗口,你会看到一个时间轴;在时间轴上,你可以对每个推进器的图片帧进行排序或添加。

    点击 Add Property ,属性类型选择 Sprite Renderer/Sprite:

    animation-add-property-unity2d.png

    Lander-sprite-property-to-animate.png

    你的编辑器现在看起来是这个样子:

    Lander-SpriteAnimation-Timeline.png

    在项目窗口,点击 Sprites 文件夹,展开 truster-spritesheet.png 图片。选中 4 个切片图,然后拖到动画编辑器的 ThrusterMain : Sprite 时间线。

    动画帧在时间线中重叠在一起,你可以根据需要重新安排。首先从最右边的图片开始;点击这张图片,将它向右拖,置于 0:05 秒处:

    Lander-assign-sprite-frames-to-animation.gif

    选中最后一帧,用 Delete 键删除它。

    DeleteLastFrame.png

    点击动画窗口的 Record 按钮一次,关闭这个剪辑的记录模式,防止意外修改到这个动画:

    press-record-unity2d.png

    接下来配置动画控制器。

    Lander.cs 脚本当前的 Animation参数设置为 true 或 false,表明玩家是否点火了推进器。动画控制器应该负责计算这些参数并允许某些状态被修改。

    在项目窗口,点击 Animations 子文件夹,双击 ThrusterMain.controller。这会打开动画编辑器,当你在 ThrusterMain 游戏对象上创建动画剪辑时,Unity 会自动添加这个控制器。

    Lander-Animator-start.png

    现在推进器动画正在持续运行。

    正确地说,推进器动画只应当在玩家当前已经点火了推进器才播放。

    右击动画编辑器中的网格区域,然后选择 Create State/Empty:

    CreateStateEmpty.png

    在检视器中,将新状态命名为 NoThrust。这是动画在玩家没有任何输入时的默认状态:

    从 Entry 处,Animator 会走到 NoThrust 并停下来,直到布尔值变成 true。为了改变动画状态,你必须添加一个 transition 连接。

    在 Entry 状态上右击,选择 Make Transition。再点击 NoThrust 状态,这会从 Entry 添加一个箭头指向 NoThrust。右键点击 NoThrust,选择 Set As Layer Default State。NoThrust 会变成如下图所示的橙色:

    AnimatiionControllerMakeTransition.gif

    橙色表明这个状态将会是播放时的第一个状态。

    在 Animator 编辑器中,点击 Parameters 标签中的 + 按钮,创建一个新的 Bool 型参数,命名为 ApplyingThrust:

    Lander-create-ApplyingThrust-Parameter.png

    右击 NoThrust,点击 Make Transition,然后点击 ThrusterAnim。这会创建一个转换,允许在两个状态之间改变。执行同样步骤,创建一个从 TrhusterAnim 到 NoThrust 的转换:

    Lander-thruster-animation-state-hookup.gif

    点击从 NoThrust 到 ThrusterAnim 之间的转换线条,在检视器中点击 +,添加一个条件。这个选项只对条件 ApplyingThrust 有效。

    从下拉框中选择 true。也就是说只有 ApplyingThrust 为 true 时,动画才会变成 TrusterAnim 状态。

    Lander-ApplyingThrust-Condition-true.png

    现在编辑从 ThrusterAnim 到 NoThrust 之间的转换,同样适用 ApplyingThrust 条件,但这次将条件设为 false:

    ApplyingThrustFalse.png

    完成后的动画控制器变成这个样子:

    Lander-finished-thruster-states.png

    在 Animator 编辑器中,你可以调整动画回放速度为一个合适的值。点击 ThrusterAnim 状态,在检视器中,修改 Speed 属性为 1.5:

    Lander-ThrusterAnim-Speed.png

    推进器动画应该对用户按下扳机进行即时响应。点击两条转换箭头(NoThrust 和 ThrusterAnim 之间的两条),在检视器中,将转换有关的设置修改为 0。反选 Has Exit Time 和 Fixed Duration:

    Lander-transition-settings-for-thruster.png

    最后,你需要将相同的动画和控制器应用到左右推进器。在结构视图中,选择 ThrusterLeft 和 ThrusterRight,将 ThrusterMain.controller 从项目窗口的 Animations 文件夹拖到 Animator 组件的 Controller 属性上:

    DragThrusterControllers.gif

    点击 Play,运行游戏;用 WASD 或箭头键试一下你的推进器吧!

    ThrustersPlay.gif

    休斯顿,起飞吧!

    精灵的排序和图层

    如果精灵不进行排序的话,2D 引擎的事情不能算完。Unity 允许你使用图层系统和图层顺序来进行精灵的排序。

    点击 Play,再次运行游戏;拿出你吃奶的力气去碰撞旁边的大石头吧!观察编辑器中的场景视图,当 Restart 按钮显示时,有一些石头会消失在幕布图片之后:

    Lander-incorrect-ordering.png

    这是因为渲染引擎无法得知精灵的摆放顺序。所有精灵,除了飞船之外,都用的是默认的图层顺序 0。

    要解决这个问题,需要使用图层和图层排序系统来分隔精灵。Unity 会按照指定的图层顺序来将精灵们绘制在图层上。对于每个图层,Unity 会按照精灵在图层中的序号依序绘制。

    点击 Edit 菜单,然后点击 Project Settings,选择 Tags & Layers。展开 Sorting Layers 一节。

    点击 +,添加 3 个新的图层:

    • Background
    • Rocks
    • Player

    点击并拖动每个图层旁边的句柄,将他们的顺序设置为如下所示。你的图层顺序决定了 Unity 的绘制这些图层中的精灵的顺序:

    Lander-layer-ordering.gif

    从结构视图中点击 Backdrop;在 Sprite Render 组件中点击 Sorting Layer 下拉框,然后选择列表中的 Background:

    background-sorting-later-unity2d.png

    展开 Rocks 游戏对象,选中所有下级的 rock 游戏对象。在检视器中,将这些对象的Sorting Layer 统统设置为 Rocks:

    rocks-sorting-layer-unity2d.png

    由于场景中的岩石是前后交叠的,很方便用它们来演示同一图层中的精灵的 Order in Layer 属性的用法。

    如果你不为 Rocks 图层中的每个岩石分配一个排序值,你会发现在游戏中,岩石会随机地从其它岩石上“弹出”。这是因为 Unity 无法以同一的顺序绘制岩石,因为它们在图层中的顺序都是0。

    找到交叠在一起的岩石,将位于较前面的岩石指定一个更大的 Order in Layer 值。

    Lander-rock-order-in-layer-property-demo.gif

    修改 Lander 及其子对象,以及 Pickups 下面的所有 Fuel 游戏对象的 Sprite Renderer Sorting Layer 属性为 Player。这将确保它们绘制在所有东西之前。

    但有一个问题。对于推进器动画该怎么办(而且,登陆舱的脚架正常情况下应当隐藏在登陆舱下面)?如果我们不指定它们的 Order in Layer 数值,我们会看到一些奇怪的现象。

    Lander-order-in-layer-conflict-problems.png

    将 Lander 的 Order in Layer 属性修改为 2。选中 Thruster 的所有子对象和 LanderFeet 对象,设置它们的 Order in Layer 为 1。

    当登陆舱碰到登录平台时,平台会微微下沉,表示你已经着陆。登录平台和岩石精灵是彼此交叠的,为了使结果看起来正确,你必须将登录平台排在岩石的后面。

    将 LanderObjective 精灵设置为 Rocks 图层,然后指定它的 Order in Layer 为 0。

    设置 LanderObjective 下方的岩石的 Order in Layer 值设置为 1:

    LanderObjectiveAndRockUnderneath.png

    最后,选中 Prefabs 文件夹中的 Explosion 预制件,将它的 Sorting Layer 设置为 Player:

    set-explosion-prefab-sorting-layer-unity2d.png

    点击 Player,试一下你的飞行技巧,点火推进器,落到着陆平台上——注意不要在一个反向上推得过猛,以便撞到岩石上!

    FinishedLanding.gif

    结束

    你可以从这里下载本教程完整的示例项目。

    你已经学习了 Unity 的大部分重要的 2D 设计功能,你已经有一个好玩的重力着陆游戏去“秀”一下了!

    如果想进一步学习 Unity 的 2D 工具和功能,你可以看一下官方的 Unity 2D 游戏制作文档。

    希望你喜欢这个教程——请在下面的评论中留言或提问。我期望与你交流!:]

    展开全文
  • unity2D射击游戏模板2D Wave Shooter 1.zip
  • 资源名称:Unity权威指南:Unity 3D与Unity 2D全实例讲解内容简介:游戏蛮牛社区出版的一本书。主要是对应于英宝通的Unity3d公开课来阅读的。资源目录:第1章 Unity 3D界面介绍1.1 Unity 的标题栏1.2 菜单栏1.3 工具...
  • unity 2d tools

    2013-02-12 18:51:56
    unity 2d tools,里面2个版本,一个翻译说明
  • Unity 2d寻路插件
  • Mastering Unity 2D Game Development 高清原版E文
  • unity2D横版冒险跳跃游戏源码;仅供参考,请勿商用。 亲测可用,版本别太高,unity2D横版冒险跳跃游戏源码;
  • 基于Unity2D的小游戏

    2020-05-18 00:24:24
    一个基于unity2D的课程小作业 - 太空侵略者,用C#编程实现,整体框架粗略,需要的可以看一下。
  • unity 2D跳跃游戏源码

    2018-02-07 11:42:14
    游戏截图: http://blog.csdn.net/niehanmin/article/details/79278293 unity 2D跳跃游戏源码
  • 自己做的Unity2D小游戏

    2020-11-20 10:51:32
    自己做的Unity2D小游戏,两个人顶球进篮筐,喜欢的支持下,哈哈哈
  • Unity2D平台开发

    千次阅读 2017-12-23 20:35:41
    Unity2D平台开发 ##1、2D游戏对象 ++1.1、Unity2D系统简介 ++++Unity4.3以前的版本在制作2D游戏时都是使用2D游戏插件来制作,像:2DToolKit,Uni2D等,在4.3以后的版本中,Unity发布了内置的2D游戏制作功能:2...

    Unity2D平台开发

    ##12D游戏对象

    ++1.1Unity2D系统简介

    ++++Unity4.3以前的版本在制作2D游戏时都是使用2D游戏插件来制作,像:2DToolKitUni2D等,在4.3以后的版本中,Unity发布了内置的2D游戏制作功能:2DSprite

    ++++Unity2D核心模块包括: Sprite的创建,2D动画的制作和2D物理组件的使用。

    ++1.2Sprite精灵

    ++++2D游戏的图像部分主要是图片的处理,图片通常称为Sprite精灵;

    ++++为了提高效率2D游戏会将不同的图片拼接成一张大图,在游戏运行的时候,再将这张大图中的某一部分读出来作为Sprite显示在屏幕上。

    ++1.3、精灵创建的两种方式

    ++++1、将不同的图片在图像软件中拼接为一张大图,导入到Unity中使用SpriteEditor工具将大图分割成若干个Sprite使用;

    ++++2、直接将原始图片导入Unity中,使用Unity提供的SpritePacker工具将导入的图片打包,再从中读取Sprite使用。

    ++1.4SpriteEditor创建精灵

    ++++1、导入一张图片到Unity中。

    ++++2、将Texture Type设置成Sprite(2D and UI); Sprite Mode设置为Multiple,可以将大图分割成若干小图。

    --Texture Type :设置纹理图片类型;

    --Sprite Mode :设置精灵的模式;


    ++++3、点击SpriteEditor打开编辑窗口。

    --Name :名字;

    --Position :位置及大小;

    --Border :用于设置精灵上下左右的边框;

    --Pivot :被切割精灵的中心点。


    ++++4、点击SliceType为分割方式,可以设置每个精灵大小的尺寸。

    --Automatic :自动计算尺寸;

    --Grid By Cell Size :按照被切格子的大小;

    --Grid By Cell Count :按照被切格子的数量


    ++++5、选择合适的切割模式后,对图片操作后如下图,在Assets目录中大图下面会出现分割后的小图片。


    ++++6、如果剪切不符合要求,可以选择多余的网格,按Delete键删除,然后选中需要放大的网格,在下图所示窗口中更改其尺寸,同时也可以改变该图片的名字。

    --Name :被切割精灵图片的名字。

    --Position :被切割格子的坐标及大小。

    --Border :被切割精灵图片的边框。

    --Pivot :被切格子的中心点位置。


    ++1.5SpritePacker打包精灵

    ++++Edit=>Project Settings=>Editor】中设置SpritePaker设置成AlwaysEnabled. 默认是Disabled(关闭的)。

    --Disabled :该功能不能使用。

    --Enabled For Builds :只有在导出游戏时使用。

    --Always Enabled :任何情况下使用该功能。


    ++1.6、精灵使用及打包

    ++++只需要把图片拖入到场景中即可。

    --选中所要打包的图片,设置 Packing Tag,点击Apply

    --然后打开【Window=>Sprite Paker】窗口,点击Pack按钮即可。


    ++1.7、图层排序

    ++++2D游戏中的图片之间没有深度关系,都处于同一个平面上,但在实际游戏中需要为它们排序,按视觉上的空间先后顺序显示。

    --Sorting Layer :点击后可以添加层,也可以为精灵设置层,层越靠下越先显示fish层的精灵。

    --Order in Layer :值越大越显示在最前面,可以在脚本中动态的更改,该属性只对同一层中的不同精灵起作用。


    ##22D物理组件

    ++2.12D物理引擎

    ++++2D物理引擎与3D物理引擎在功能上基本相似,当我们给精灵添加刚体后,它就会受2D物理引擎的控制。

    ++++点击Component => Physics 2D就可以添加2D刚体和碰撞器组件等。


    ++2Rigidbody2D组件


    ++32D碰撞器组件

    ++++2D碰撞器组件与3D碰撞器作用一样,专门用于检测是否发生碰撞。


    ++42D碰撞和触发回调方法

    ++++OnCollisionEnter2D(Collision2D other)  :刚进行碰撞时调用

    ++++OnCollisionStay2D(Collision2D other) :一直保持碰撞时调用

    ++++OnCollisionExit2D(Collision2D other) :碰撞结束时调用

    ++++OnTriggerEnter2D(Collider2D other) :刚触发时调用

    ++++OnTriggerStay2D(Collider2D other)  :保持触发状态时调用

    ++++OnTriggerExit2D(Collider2D other)  :触发结束时调用



    ##3、2D开发常用类

    ++++Rigidbody2D 2D刚体

    ++++Collider2D 2D碰撞器

    ++++Joint2D 2D链条

    ++++Collision2D 2D碰撞信息


    ##42D动画创建

    ++4.12D动画创建

    ++++Sprite有两种类型

    --一种是单张的图片,通常用作背景或者单个元素,

    --另一种是可以形成序列的sprite,用来创建序列帧动画。

    ++++层次视图: 选中要创建动画的所有图片拖到层次视图中,运行后在场景中产生动画。


    ++++Assets中产生了动画和动画控制器,在层次视图中自动生成精灵,并且带有动画控制器组件。


    ++4.22D动画编辑

    ++++选中要创建动画的对象再按Ctrl+6打开Animation编辑窗口。

    --点击【Add Property】后可以添加属性,如果要更改动画中某一帧的位置、旋转和缩放,只需要点击后面的+ 号即可。


    ++++选中要改变位置的关键帧后,可以在此位置输入值,此时Animation会自动记录任何改动,点击预览可以察看修改后的动画。

    ++++Animation编辑窗口中,在关键帧处点击右键,添加事件,此时可以选择其脚本中的方法,当动画执行到该关键帧时,该方法就会被调用。



    ##5GUI

    ++5.1GUI简介

    ++++在游戏制作中,游戏界面元素是不可或缺的一部分,Unity提供了完善的GUI界面元素,创建时只需要输入简单的代码即可完成;

    ++++所有的GUI界面元素都是在OnGUI方法中来实现的;

    ++++GUI界面元素布局分为自动布局和自定义布局;

    ++5.2GUI自动布局

    ++++自动布局的类为GUILayout,其创建的GUI元素位置由系统进行自动布局,不能进行人为修改;

    ++++示例:

    void OnGUI(){

        if(GUILayout.Button(Button)){

            Debug.Log(buttton);

    }

    }

    ++5.3GUI自动布局类方法

    ++++Label :创建一个自动布局的标签

    ++++Button :创建一个自动布局的按钮

    ++++Box :创建一个自动布局的Box

    ++++Toggle :创建一个自动布局的开关

    ++++HorizontalSlider :创建一个水平滑动条

    ++++VerticalSlider :创建一个垂直滑动条

    ++++Toolbar :创建一个工具栏

    ++5.4GUI自定义布局

    ++++自定义布局的类为GUI,其创建的GUI元素位置和大小都可以由代码来控制;

    ++++示例:

    void OnGUI(){

        if(GUI.Button(new Rect(10,10,100,50),Button)){

            Debug.Log(GUI button);

    }

    }

    ++5.5GUI自定义布局类方法

    ++++Button :创建按钮,点击执行按钮事件,只执行一次。

    ++++RepeatButton :鼠标点击不松开,会一直执行按钮事件。

    ++++TextArea :创建多行文本区域,编辑字符。

    ++++SelectionGrid :创建按钮网格。

    ++++BeginScrollView :滚动视图的开始。

    ++++EndScrollView :滚动视图的结束,要与Begin成对出现。

    ++++Window :创建一个弹出窗口。



    #立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

    ++立钻哥哥推荐的拓展学习链接(Link_Url

    ++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

    ++++Unity引擎基础https://blog.csdn.net/vrunsoftyanlz/article/details/78881685

    ++++Unity面向组件开发https://blog.csdn.net/vrunsoftyanlz/article/details/78881752

    ++++Unity物理系统https://blog.csdn.net/vrunsoftyanlz/article/details/78881879

    ++++Unity2D平台开发https://blog.csdn.net/vrunsoftyanlz/article/details/78882034

    ++++UGUI基础https://blog.csdn.net/vrunsoftyanlz/article/details/78884693

    ++++UGUI进阶https://blog.csdn.net/vrunsoftyanlz/article/details/78884882

    ++++UGUI综合https://blog.csdn.net/vrunsoftyanlz/article/details/78885013

    ++++Unity动画系统基础https://blog.csdn.net/vrunsoftyanlz/article/details/78886068

    ++++Unity动画系统进阶https://blog.csdn.net/vrunsoftyanlz/article/details/78886198

    ++++Navigation导航系统https://blog.csdn.net/vrunsoftyanlz/article/details/78886281

    ++++Unity特效渲染https://blog.csdn.net/vrunsoftyanlz/article/details/78886403

    ++++Unity数据存储https://blog.csdn.net/vrunsoftyanlz/article/details/79251273

    ++++Unity中Sqlite数据库https://blog.csdn.net/vrunsoftyanlz/article/details/79254162

    ++++WWW类和协程https://blog.csdn.net/vrunsoftyanlz/article/details/79254559

    ++++Unity网络https://blog.csdn.net/vrunsoftyanlz/article/details/79254902

    ++++C#事件https://blog.csdn.net/vrunsoftyanlz/article/details/78631267

    ++++C#委托https://blog.csdn.net/vrunsoftyanlz/article/details/78631183

    ++++C#集合https://blog.csdn.net/vrunsoftyanlz/article/details/78631175

    ++++C#泛型https://blog.csdn.net/vrunsoftyanlz/article/details/78631141

    ++++C#接口https://blog.csdn.net/vrunsoftyanlz/article/details/78631122

    ++++C#静态类https://blog.csdn.net/vrunsoftyanlz/article/details/78630979

    ++++C#中System.String类https://blog.csdn.net/vrunsoftyanlz/article/details/78630945

    ++++C#数据类型https://blog.csdn.net/vrunsoftyanlz/article/details/78630913

    ++++Unity3D默认的快捷键https://blog.csdn.net/vrunsoftyanlz/article/details/78630838

    ++++游戏相关缩写https://blog.csdn.net/vrunsoftyanlz/article/details/78630687

    ++++设计模式简单整理https://blog.csdn.net/vrunsoftyanlz/article/details/79839641

    ++++U3D小项目参考https://blog.csdn.net/vrunsoftyanlz/article/details/80141811

    ++++UML类图https://blog.csdn.net/vrunsoftyanlz/article/details/80289461

    ++++Unity知识点0001https://blog.csdn.net/vrunsoftyanlz/article/details/80302012

    ++++U3D_Shader编程(第一篇:快速入门篇)https://blog.csdn.net/vrunsoftyanlz/article/details/80372071

    ++++U3D_Shader编程(第二篇:基础夯实篇)https://blog.csdn.net/vrunsoftyanlz/article/details/80372628

    ++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/


    --_--VRunSoft : lovezuanzuan--_--

    展开全文
  • unity2D吃豆人小游戏

    2019-04-05 09:06:07
    unity2D简单小游戏吃豆人资源,此资源包含可以直接运行的源代码,键盘操控吃豆人吃豆豆。
  • unity2d 根据像素图生成地图.
  • 游戏截图: http://blog.csdn.net/niehanmin/article/details/79163588 unity2D塔防游戏源码Tower Defense 2D 0.9.2 运行环境:Unity 5.6.0或以上
  • Unity 2D Sprite

    2017-08-26 19:44:37
    Unity 2D Sprite的正确打开方式这里简单的叙述一下Unity3D 的 Sprite组件的需要注意的基本功能,适合不懂的人看。 首先需要说明Unity编辑器中创建的2D和3D工程,在初始时候会有什么区别: 在2D中Camer默认的...

    Unity 2D Sprite的正确打开方式


    这里简单的叙述一下Unity3D 的 Sprite组件的需要注意的基本功能,适合不懂的人看。

    • 首先需要说明Unity编辑器中创建的2D和3D工程,在初始时候会有什么区别:
      1. 在2D中Camer默认的Projection模式为Orthograpic,而3D中为Perspective
      2. 在2D 中Scene窗口默认处于2D模式下,而3D为3D模式。
      3. 向2D工程的Assets目录中添加图片资源的时候,默认Texture Type为Sprite,而3D为Default.
      4. 在Editor Setting中(Edit -> Project Setting -> Editor),2D工程的Default Behavior Mode为2D,而3D中为3D。


    • 在导入一张图片的时候,可以在Inspector窗口中查看图片信息,以及对他进行相应的一些操作。
      1. 其中Pixels To Units默认值为100,表示该图片的长或宽上100个像素对应与世界坐标系的1个单位长度。
      2. 一般情况下,当需要放大模型时候,是直接调节对象的Transform的Scale。但由于2D场景中,处理的都是图片(像素数据),所以图片分辨率小但是又去强制放大,就会出现马赛克或锯齿。所有这时候就要调节前面提及的Pixels To Units。通过修改世界坐标系中1个单位长度对应的Sprite长或宽的像素来改变Sprite的显示大小,值越小图片越大。 3.


    • 有过3D开发经验的你应该知道,在3D图形学中有一种画家算法,即后绘制的几何形状会覆盖之前的绘制形状。而Sprite组件中的Sorting Layer属性控制的是不同层之间的绘制顺序,而Order in Layer属性控制的是同层中物体的绘制顺序。


    • 制作Sprite动画:
      1. 首先找一张有良好分割的帧图片,导入到Unity中。
      2. Inspector窗口中查看该图片信息。修改其中Sprite Mode为Multiple。然后Apple,再打开Sprite Editor
      3. 然后点击Sprite Editor窗口左上角的Slice,保持默认设置,然后点击Slice。如果每个图片的分割良好的话,Unity会自动对图集的每个图片进行进行划分区域。否则,你就得去手动调节。OK之后,Apply保存退出。
      4. 这样就可以直接把这个Sprite图片拖到Hierarchy视图中。创建一个Sprite对象。
      5. 为其添加Animations组件。(方式: Window -> Animation),然后点击Creat。
      6. 创建动画片段之后。可以直接把刚才拆分好的所以子图片直接拖到时间线上。
      7. 其中,Animation的采样率Sample可以调节动画速度。值越小,动画越慢。
    展开全文
  • Unity 2D全实例讲解2

    2018-06-19 04:52:17
    Unity 2D全实例讲解,游戏开发必备,一书在手,轻松掌握游戏开发全部手段,赶紧下载啊
  • Unity 2d休闲游戏《 打地鼠》源码,Unity 2d休闲游戏《 打地鼠》源码
  • unity2d 物理Mauro Fanelli first started using Unity on his Mac back in 2005, but until relatively recently, he had never been a dedicated game developer. A game journalist and a self-taught (but by ...

    unity2d 物理

    Mauro Fanelli first started using Unity on his Mac back in 2005, but until relatively recently, he had never been a dedicated game developer. A game journalist and a self-taught (but by his own admission, unexceptional) programmer, Fanelli had never had the opportunity to get into the industry. The thing was, though, he had always had a burning desire to build games.

    Mauro Fanelli早在2005年就开始在Mac上使用Unity,但是直到最近,他才开始致力于游戏开发。 作为一名游戏新闻记者和自学成才的(但根据他自己的观点,他是例外)程序员,Fanelli从未有机会涉足该行业。 事情是,尽管如此,他一直渴望开发游戏。

    Then when iOS really took off, he and his future partner, artist Andrea Gellato saw the opportunity to create a 2D game with Unity. They had a clear vision for their game too:  a metroidvania action-adventure exploration game inspired by the 90s hit, Another World. The game they ended up developing, forma.8, has a beautiful, bold clean style.

    然后,当iOS真正起飞时,他和他的未来合作伙伴艺术家安德里亚·盖拉托(Andrea Gellato)看到了用Unity制作2D游戏的机会。 他们也对自己的游戏抱有清晰的愿景:灵感来自90年代热门影片《另一个世界》的银河战士动作冒险冒险游戏。 他们最终开发的游戏forma.8具有美丽,大胆的简洁风格。

    Throughout the course of the forma.8 project, we added more and more  2D-specific support  in new versions. Mixed Bag were particularly thrilled with the 2D physics features in Unity 5.6, and they’ve been updating regularly to get improvements like:

    forma.8项目的整个过程中,我们在新版本中添加了越来越多的2D特定支持。 混合包对Unity 5.6中的2D物理功能特别满意,并且已定期进行更新以获得改进,例如:

    CompositeCollider2D: Gathers physics geometry from other Collider2D and blends it together into a single collider composed as an outline (similar to the EdgeCollider2D) or as a decomposed set of convex polygon from a concave outline (similar to the PolygonCollider2D).

    CompositeCollider2D :收集其他Collider2D的物理几何并将其混合到一个碰撞器中,该碰撞器由轮廓(类似于EdgeCollider2D)或从凹轮廓分解成的凸多边形组成(类似于PolygonCollider2D)。

    ContactAPI: An additional set of non-allocating calls that allow polling of contact information in real time, removing the dependency on collision callbacks.

    ContactAPI :一组额外的非分配调用,允许实时轮询联系信息,从而消除了对冲突回调的依赖。

    TileMap Collider 2D: Creates colliders per-tile using the Grid cell shape or the Sprite outline for the relevant tile.

    TileMap Collider 2D :使用相关图块的Grid单元格形状或Sprite轮廓按瓦片创建碰撞器。

    The 2D features gave them significant improvements in performance and workflow efficiency. In fact, Fanelli says that the Unity engine plus Asset Store plugins enabled their five-man studio to build what would normally require 20 people. Read the full story of how Mauro Fanelli and his artist collaborator and studio co-founder, Andrea Gellato, made their 2D dream-game a reality.

    2D功能使他们在性能和工作流程效率上有了重大改进。 实际上,Fanelli说,Unity引擎加上Asset Store插件使他们的五人工作室能够构建通常需要20个人的工作室。 阅读有关 Mauro Fanelli及其艺术家合作者和工作室联合创始人Andrea Gellato如何使他们的2D梦幻游戏成为现实的完整故事

    即将推出更多2D功能 (More 2D features on the way)

    As you can see on our roadmap, we’re continuing to improve 2D Physics  in Unity. For example, with Unity 2018.1 beta, 2D Physics is now able to use all the cores on a device to run its simulation. If you’re using the beta, you can see ‘Job Options (Experimental)’ in 2D physics settings.

    正如您在路线图中所看到的那样,我们正在继续改进Unity中的2D物理。 例如,在Unity 2018.1 beta中 ,2D Physics现在能够使用设备上的所有内核来运行其仿真。 如果您使用的是Beta,则可以在2D物理设置中看到“作业选项(实验性)”。

    Our 2D team would love to hear what you think about the experimental features and about 2D Physics in general on the 2D forum.

    我们的2D小组很乐意在2D论坛上听到您对实验功能和2D物理的总体看法。

    翻译自: https://blogs.unity3d.com/2018/02/05/a-2d-dream-comes-to-life-with-unity-2d-physics-in-forma-8/

    unity2d 物理

    展开全文
  • Unity2d的初学者关于unity2d的使用如何学习unity如何解决其中的问题游戏画风背景音乐 关于unity2d的使用 unity2d开发2D游戏的介绍,对于新版而言,许多脚本需要新的定义才能使用,这篇文章适合初学者,建议使用unity...
  • 学习unity2d的计划安排

    2019-10-31 22:09:30
    unity2d学习资料 1.Corgi Engine 是一个基于 Unity 的 2D + 2.5D 平台游戏套件,在 Unity 资源商店中可以找到。 github中对于corgi的中文文档学习内容 说明:2d游戏进阶知识 2.简书中他人对于unity2d的学习经验,...
  • unity2D塔防游戏源码Tower+Defense+2D+0.9.2 ,很好的学习资料,请勿商用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,446
精华内容 3,378
关键字:

unity2d