最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity sprite renderer 切割
本文将详细介绍 Unity 中 Sprite Renderer 切割相关内容,大家可参考学习。主要内容步骤如下:
引子
上一次我们探讨了 MonoBehaviour 的前世今生,了解到游戏中的每个 GameObject 都由脚本控制。本次我们将开始研究 Unity 中 Native 2D 里的 Sprite,并使用 Animation 让 Sprite 动起来。
在接下来的几篇博客中,我会通过制作一个 Flappy Bird 游戏来讲解 Unity 中各个组件的使用。项目的源代码可在 Unity Flappy Bird 找到,欢迎各位前去 Fork 和 Star。
如何创建 Sprite
创建一个 Sprite 可按以下步骤进行:
- 添加 Sprite 资源:将一张图片拖动到 Project 视图中的某个文件夹,以此添加 Sprite 资源。
- 修改属性与分割:修改 Sprite 资源的各项属性。若为 SpriteSheet,还需在 Sprite Editor 中对其进行分割。
- 创建 Sprite 或动画:将 Sprite 资源拖动到 Scene 视图中;或者按住 Ctrl 键,同时选中 SpriteSheet 中的几张图片拖动到 Scene 视图,这种方式会同时创建一个动画。
创建 Sprite 过程中需注意以下几点:
- 添加到 GameObject:Sprite 作为 Sprite Renderer 组件的一个属性添加到一个 GameObject 中。
- 渲染优先级:Sprite Renderer 中的 Sorting Layer 属性可设置 Sprite 被渲染的优先级。
- Shader 使用:SpriteRenderer 使用 Sprite 属性中的 Texture,但使用 Material 中的 Shader(着色器)。默认选择的 Sprites/Default 这种 Shader 忽略光照,而 Sprites/Diffuse 这种 Shader 则不会忽略光照。若将 Material 设置为 None,将无法显示 Sprite,因为未对该 Sprite 进行着色。
Sprite 的详细设置
SpriteSheet
SpriteSheet 指的是把多个 Sprite 放到一张图片里,通常是将一段帧动画放在一张图片中,游戏引擎会对这个 SpriteSheet 进行分割,轮流播放其中的每一帧,从而形成一个动画序列。
注意事项
对应相关设置中的几个要点,分别说明注意事项:
- pivot point 设置:当 Sprite Mode 为 Single 时,可在 Inspector 中设置 Sprite 的 pivot point。若你使用过 Cocos2d - x,就会知道这个 pivot point 相当于 Cocos2d - x 中的 anchor point。在 Scene 中,我们以这个 pivot point 为中心,对 Sprite 进行旋转、平移等 Transform 设置。若使用 SpriteSheet,可在 Sprite Editor 中为每一个 Sprite 设置 pivot。
- 计量单位:在 Unity 中,距离单位是 Unit。为保证 3D 与 2D 的一致性,2D 游戏也使用 Unit 作为计量单位。Pixel to Units 表示这一转换比例,例如一张宽度为 100 的 Sprite 图片,在 Scene 中显示的长度为 1Unit。
- 切割方式:在 Sprite Editor 中可进行 Automatic 和 Grid 两种形式的切割。一般来说,Automatic 方式通常能较好地解决问题;当需要几张 Sprite 图片大小一致时,可使用 Grid(网格)切分来限制每个 Sprite 的大小。
为 Sprite 添加 Animation
有两种方式可创建动画:
- 拖动 SpriteSheet 创建:将 SpriteSheet 中的几个 Sprite 同时拖动到 Scene 视图中。
- 在 Animation 视图添加:在 Scene 视图中,选中想要添加动画的 GameObject,然后在 Animation 视图中,点击 Add Curve 对 GameObject 的各种属性进行动画播放。
在 Unity 中,Animation 是一个较为宽泛 的概念,并不局限于帧动画,它包括了 GameObject 各种属性的动态变化。点击 Add Curve 后,会看到一个界面,从 Position 到 Color,从 Rotation 到 Sprite 等属性都可进行 Animation,因为在 Unity 中的 Animation 实际上是在添加一个变化曲线,而非我们普遍理解的 Animation。
Animator 和 Animation 的区别
若想让一个 Animation 动起来,需要两个 Asset 资源,分别是 Animation Clip 和 Animator Controller 两种资源。
- Animator:是一个动画状态机,它控制了各个 Animation 之间的切换,后续博客会详细讲解其使用。
- Animation 的详细设置:在 Animation 视图中有一些重要设置:
- 关键帧:是 Animation 的转折点,可在这一帧设置 Sprite 的变化点,或 Position 等数据的转折点。
- 动画事件:可在动画的某一帧设置,这里设置的动画事件是该 GameObject 上所有脚本组件的非重载函数(即排除掉 OnUpdate、Start 之类的函数)。设置完动画事件后,每次动画循环一遍,该函数都会在该帧被调用。
- 增加变化曲线:如前文所述,可对任意属性进行变换。
- Sample(取样):指在 1s 内设置的帧数。在界面中可看到 1s 的间隔中有 12 个虚线,代表这一秒中设置了 12 帧来调节动画。需注意,这里的 sample 与游戏设置的刷新帧率无关。
总结
总体而言,在 Unity 的 Animation 中编辑动画非常方便,相较于以前使用 Cocos2d - x 编辑动画,有了很大的提升。但 Unity 对 Sprite 本身的支持仍存在一些不足,做 2D 游戏时,习惯以像素 Pixel 作为重要度量单位的开发者,可能会对 Unity 以 Unit 为单位的坐标体系不太适应,这也是 3D 引擎思考方式带来的变化。