2D项目经验总结
- 前言
- 地图的绘制
- Sprite Editor
- 叠层注意点(SortingLayer相关知识点)
- Tile Paltette的使用
- Animated Tiles(动起来的图片(也称作瓷片或者瓦砖))
- 玩家移动
- 玩家方向的翻转
- 刚体
- 注意点
- 碰撞器
- 输入系统InputSystem(新版Or旧版)
- 旧版本
- 新版本:增加了可视化工具。
- 玩家的移动
- 玩家的跳跃
- 实现方式1:实时检测脚底下的碰撞。
- 实现方式2:通过事件注册
- 玩家多段攻击实现
- 动画实现方式
- 伤害判定方式
- 2D动画的使用
- 常用属性
- Has Exit Time
- 制作帧动画
- 动画树(BlendTree)(通常用于跳跃状态或者跑步走路状态的切换)
- 二级动画菜单(State Machine)
- 注意点
- 部分动画需要同时更改碰撞体
- 碰撞体
- 常用属性
- Layer Overrides
- 多碰撞体的使用(既是碰撞体,也是触发器)(针对于一个物体和其他物体有不同的交互效果)
- 敌人的各种状态判定
- 撞墙
- 是否掉入悬崖
- 摄像机的相关使用
- 摄像机跟随
- 摄像机范围锁定,规定展示区域
- 用摄像机实现攻击抖动感
- 音效
- Audio Mixer
- 移动端的屏幕操控
- 游戏暂停功能
前言
这篇文章不会记录的特别详细,只是大概记录一下当时的使用心得。
地图的绘制
Sprite Editor
用来剪切图片,将图集中需要用到的图片剪切出来。
叠层注意点(SortingLayer相关知识点)
Sorting Layer越靠下,表示渲染的顺序越靠后。
同一Layer层,Order in Layer越大,表示渲染顺序越靠后。
Tile Paltette的使用
首先在WIndows面板下打开Tile Paltette。
然后Create New Palette
然后将剪切好的图集拖拽进来即可。
然后点击笔刷,选择图片,就可以在Scene面板中画图了。
Animated Tiles(动起来的图片(也称作瓷片或者瓦砖))
Project面板中创建 Animated Tiles,然后选择要动起来的图片数量,如图中瀑布是四格,因此添加四格,然后将对应顺序的瀑布图片填入,一共会创建三个Animated Tiles,然后将他们拖入到Tile Palette面板中,选中他们绘制出来的图片即是动起来的瀑布。
玩家移动
实现玩家移动需要三个组件,刚体,碰撞体,unity输入系统
刚体主要实现玩家的物理特性,例如移动和跳跃。
碰撞体主要负责和地形交互,在哪里移动。
输入系统负责接收玩家的指令。
玩家方向的翻转
一种是更改对应方向的Scale值,一种是更改Sprite Renderer的Filp,两种方式都可以,看个人爱好。
刚体
主要实现物体的物理特性,此处有个注意点,就是要锁定Z轴的转动。因为玩家操作的角色实际上是一张图片,遇到角落磕磕碰碰很可能就会绕着Z轴转动,因此需要锁定Z轴。
注意点
玩家上下方向的力一般情况下都使用刚体自带的那个值,因为玩家默认受到重力影响,改成0下落的速度会非常的慢。
碰撞器
玩家与地形之间的碰撞使用碰撞器来触发。可以自己调整碰撞器的形状和大小,人物一般使用椭圆。
输入系统InputSystem(新版Or旧版)
旧版本
旧版本就是获取InputSystem中输入的值,然后根据获取到的值做对应的操作。
新版本:增加了可视化工具。
例如我想给玩家角色添加跳跃事件。
又或者我想监听玩家上下左右按键移动。
拿到对应的数据,然后交给刚体去做对应的移动或者跳跃操作即可。
玩家的移动
更改刚体的速度即可。
玩家的跳跃
玩家跳跃有个注意点,不做限制的话玩家可以一直跳,直至跳出屏幕外(疯狂的小鸟)。因此我们需要给玩家跳跃加点限制。
实现方式1:实时检测脚底下的碰撞。
实时检测脚底下的碰撞,接触到地面则设置为可跳跃状态,否则禁止跳跃。
实现方式2:通过事件注册
事件有开始,那就有结束,因此我们可以设置一个可跳跃次数,当检测到跳跃开始的时候-1,这种方式还可以实现吃道具进阶连跳(例如I wanner游戏)。每次跳跃的时候判断当前是否还有跳跃次数,没有则禁止跳跃。
玩家多段攻击实现
动画实现方式
实现方式很简单,如图下所示:
此处要用到Has Exit Time这个参数
首先判断进入下一个攻击的条件都一样,是玩家是攻击状态,并且触发了Attack。
此处Exit Time,在0.9部分之前按攻击,会设置玩家为攻击状态并触发Attack,否则进入Exit,退出当前攻击。退出的时候会将玩家状态重置。
伤害判定方式
通过碰撞器触发。
此处需要用到多边形碰撞体,一帧一帧查看角色的攻击动画,然后在角色攻击的那一帧,绘制出和武器一样的碰撞体,并且将这个碰撞体设置为True,其余帧为false。然后给武器添加上脚本,获取到碰撞的敌人,对他造成伤害和攻击效果。
2D动画的使用
常用属性
Has Exit Time
这个属性经常使用,意思是当前动作切换到下一个动作是否需要当前动作播放完毕,取消勾选即可直接进入到下一个动作。
当前在树中或者二级菜单最后一个动画的时候,如果没有condition,一定要勾选上这个属性,否则最后一个动画会直接被unity判定跳过。
制作帧动画
将对应的图片插入到Animation面板中,同一帧可以改变多项,例如图片,还有图片的阿尔法值,如图下所示展示的是主角受到攻击的动画,同时自身还要闪光。
动画树(BlendTree)(通常用于跳跃状态或者跑步走路状态的切换)
即一系列的动画都由一个值控制的时候可以使用动画树。
此处拿玩家跳跃距离,跳跃动作分为:起跳、向上加速、空中悬停,向下加速落地等。他们都可以由玩家垂直方向的速度控制。
二级动画菜单(State Machine)
就是在当前动画面板中新添加一个动画面板,相当于当前类里再加一个类。里面有单独的判断条件,和动画树不一样的是,里面的值也可以条件也可以单独判断
注意点
部分动画需要同时更改碰撞体
例如下蹲动画,玩家此时下蹲,碰撞面积实际是变小了的,所以要更改碰撞体的面积和偏移量(碰撞体不支持锚点,因此都是整个放大缩小)
碰撞体
常用属性
Layer Overrides
可以选择与哪些layer层级交互,哪些不交互。还可以控制交互的优先级,数字越大,优先级越高(用于一个物体上有多个碰撞体的情况)。
多碰撞体的使用(既是碰撞体,也是触发器)(针对于一个物体和其他物体有不同的交互效果)
举个例子,一个敌人,他要和地形产生碰撞,但是他又是玩家角色的触发器(碰撞的时候造成击退和伤害)。此时就有一个很尴尬的点,勾选上isTriger,不会与地形产生交互,直接会掉下去,不勾选又无法和玩家产生触发伤害击退的交互,因此只需要使用俩个碰撞体即可,一个作为碰撞器,一个作为触发器。
敌人的各种状态判定
撞墙
在敌人前方增加一个碰撞器,试试检测是否与墙体发生碰撞,碰撞则掉头
是否掉入悬崖
在敌人前方脚下增加一个碰撞器,检测前下方是否有路,没路则返回。
摄像机的相关使用
摄像机跟随
使用cinemaachine组件,选择2D相机
摄像机范围锁定,规定展示区域
添加Add Extension,选择Confinder2D,然后选中地图中的一个碰撞体给他设置范围,注意这个碰撞体要作为触发器,不然可能会拦主角的路
用摄像机实现攻击抖动感
添加Inpulse lister,游戏中也添加一个相关脚本,设置相关参数即可。
音效
Audio Mixer
将音效分级,这样可以实现一个统一控制所有音量,单独的音效可以分别控制自己。
移动端的屏幕操控
添加一张图片,然后添加On-Screen Stick即可实现,此处属于和unity新的输入系统搭配使用。
如果有报错,改一下这个参数即可。
游戏暂停功能
通过Time.timeScale控制,1表示正常,0表示暂停。此值也可以控制游戏速度的快慢,看个人需要更改。