愤怒的小鸟课程知识点提炼

box2d 愤怒的小鸟 愤怒的小鸟攻略_UI

想让两个物体之间有弹簧一样的弹性

首先先给两个物体添加Regidbody2D组件 然后把其中不会动的挂到会动的物体的SpringJoint2D 上的Connectd RegidBody 上 ,把不会动·的那个物体的BodyType 设置为static 使其不受重力影响

box2d 愤怒的小鸟 愤怒的小鸟攻略_UI_02

这里特别适合做绳子之类的摇摆物体

当我们要设置物体层级时

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_03

可以在左上角添加layer 层

然后在下面Sorting Layer选择layer 层 并在order 中设置层级

我们经常会碰到鼠标拖动场景中的物体 让物体跟随鼠标

这里面涉及到一个世界坐标和屏幕坐标的转换

2D世界坐标是 屏幕中心为原点 屏幕坐标是左下角为原点

2D 或3D 物体跟随需要物体有刚体组件 这样摄像机发出的摄线才能检测到,然后代码中有一些Unity 自己调用的检测方法 OnMouseDown OnMouseUp

UISprite 则需要Canvas 中有RayCaster 并且代码中继承一些点击接口IPointClick 等

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_04


因为鼠标只能输入X Y 所以我们应该事先把物体Z 轴转换到屏幕坐标 然后再转回世界坐标如果是2D 物体Z 轴一直为0 则可以与摄像机位置相加

box2d 愤怒的小鸟 愤怒的小鸟攻略_box2d 愤怒的小鸟_05


制作手柄

box2d 愤怒的小鸟 愤怒的小鸟攻略_box2d 愤怒的小鸟_06


先求出控制的物体与中心点的向量 然后单位化 再乘以限定的距离 ,最后把控制的物体的位置先定为中心点加向量的得到的最终位置 贼简单

让小鸟弹射出去

点击小鸟时设置RegidBody 为动力学(无视其他物体力 包括SpringJoint弹力 )松开时设置为动态计算

并且延时一会 再关闭springJoint ,使其可以计算一部分弹力 然后飞出去。

小鸟撞到猪时的相对速度 collision.relaiveVelocity.magnitude

box2d 愤怒的小鸟 愤怒的小鸟攻略_触发器_07


box2d 愤怒的小鸟 愤怒的小鸟攻略_触发器_08


愤怒的小鸟的拖拽弹弓功能 可以使用lineRender组件 获取两个弹弓的点 分别和小鸟划线

两个弹弓点需要添加lineRender组件

box2d 愤怒的小鸟 愤怒的小鸟攻略_触发器_09


当我们拿到一组sprite 图片做动画时 可以选中所有图拖到场景中 这时会新生成一个animation 动画 按Ctrl + 6 打开 如果我们要在动画播放完执行某个方法则可以在最后一帧添加事件

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_10


场景中的那个动画物体上先添加脚本 脚本里面加入方法当我们想给小鸟添加拖尾时 可参考博客


来制作拖尾效果

box2d 愤怒的小鸟 愤怒的小鸟攻略_触发器_11


渲染层级的关系

box2d 愤怒的小鸟 愤怒的小鸟攻略_box2d 愤怒的小鸟_12


当我们想把粒子特效添加到UI上时 可以设置Canvas的渲染模式为Camera 并且新建摄像机UICamera 设置摄像机只渲染UI层 将摄像机添加到Canvas中

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_13


设置摄像机为depthOnly 保证未被摄像机渲染的层级可以显示出主摄像机拍摄到的画面

然后设置粒子下的Render 里的sortingLayer

box2d 愤怒的小鸟 愤怒的小鸟攻略_触发器_14


这样能保证在同一个新摄像机(UICamera) 的同一层(Player) 下,粒子特效可以在UI前面

可以通过设置Time.timescale 来设置游戏运行暂停和继续

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_15


在控制摄像机跟随小鸟时 可以在update 里面获取小鸟的位置的X 然后通过Vector3.lerp 插值运算来进行平滑的位移 摄像机会给定到一个跟随的范围可以使用,我们可以使用Mathf.Clamp方法来对值做限定

当第二个小鸟生成时 会取到限定值0,实现相机回退跟随第二个小鸟的位置

float posX = transform.position.x;
 Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position,new Vector3(Mathf.Clamp(posX,0,15),Camera.main.transform.position.y,
 Camera.main.transform.position.z),smooth*Time.deltaTime);

指定声音在哪个位置播放

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_16


2D 游戏倒无所谓 3D 游戏可以设置来玩试试

需要注意 如果声音AudioSource 是挂在小鸟身上 则小鸟销毁时 声音可能会播放终止 但是使用静态方法播放就不会

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_17


因为主摄像机里面有一个AudioListener

在播放声音时会生成一个声音克隆物体

box2d 愤怒的小鸟 愤怒的小鸟攻略_UI_18


在制作黄鸟时 可以继承红鸟实现释放技能的方法 然后通过点击左键 让黄鸟的RegidBody.velocity *2 来达到突然加速的功能(so easy)

再设置绿鸟回旋时 其实就是X 轴方向上的速度取负值

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_19

box2d 愤怒的小鸟 愤怒的小鸟攻略_触发器_20


但是在回旋的过程中我们应该确保绿色小鸟时在下降的时候才能回旋 不然上升的时候回旋他会往上回旋(细节)最有趣的肯定是炸弹黑鸟 当鸟在运行中 我们可以实时检测他周围的物体存放到一个list 集合里面 当他爆炸时 就直接把这list 里面的物体消失掉

所以可以用触发器 给黑鸟一个圆形的大触发器

box2d 愤怒的小鸟 愤怒的小鸟攻略_触发器_21

然后物体进入触发器时添加物体进列表 物体离开触发器时 将物体移除列表

box2d 愤怒的小鸟 愤怒的小鸟攻略_UI_22


foreach 遍历数组是只读的,不能进行增删操作

修改Image 的图片

box2d 愤怒的小鸟 愤怒的小鸟攻略_UI_23


for 循环里面可以用外部变量当做i 值(starsNum)

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_24


在平铺草时可能要手动拖设置同等距离

这时可以用Edit 下的snap setting 设置好间距MoveX后 点击X 让另一块草地自动吸附

box2d 愤怒的小鸟 愤怒的小鸟攻略_UI_25


设置打出的包的分辨率

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_26


pc 包会有选择分辨率的界面 ,由于代码里设置了 所以关掉选择分辨率的界面Disabled

box2d 愤怒的小鸟 愤怒的小鸟攻略_世界坐标_27


对于有特效的小鸟 点击屏幕可能会有特技释放 但是当我们点击的是暂停按钮时就不应该释放技能

所以应该判断点击的是不是UI

如果按钮在背景之上 点击屏幕其实也是点击UI 这时可以把背景的图片的Raycaster 取消勾选,只保留按钮的检测选项