1.镜头跟踪
- 在package manager中下载插件“Cinemachine";(不知为何,我的Cinemachine不在顶端栏中,而是在GameObject中)
- 选择Cinemachine–>2D Camera,此时Hierarchy中会多一个虚拟摄像机,画面被遮挡;
- 点击虚拟摄像机,在监视器中找到Follow参数,表示需要镜头跟随的物体。将player拖拽至Follow中;
- 此时试玩中发现会出现背景贴图之外的画面,为虚拟摄像机创建Cinemachine Confiner元素,为背景创建Polygon Collider 2D元素,并将背景拖拽至虚拟摄像机的Bounding Shape 2D中,最后调整虚拟摄像机的Edit Coliider至铺面所有背景即可;
可以通过监视器body参数中的Dead Zone Width和Dead Zone Height来调整镜头跟随的尺度,使得在一定范围内角色的移动不会导致镜头移动;
2.物品收集
2.1 Cherry动态
注意,由于Cherry是一个新的“角色”,因此,需要重新创建对应的Sprite(注意拖拽贴图以及设置显示的图层顺序);
同时,Cherry有对应默认的idle状态动画,此时不要直接去点击cherry的sprite然后在Animator中创建动画,应该先为收集品(collection)创建一个对应的动画文件夹(和player同级,养成好习惯!),为Cherry对象添加Animator元素,此时Unity会自动会你添加Animation Controller(注意选择对应的文件夹);之后添加动画,完成!
diamond同理!不再赘述
2.2 Cherry收集
为了收集,必须让cherry是一个碰撞体(添加BoxCollider 2D),并且需要在触碰到cherry的时候,让cherry消失,背包中cherry数+1;
2.2.1 Triger
将Cherry碰撞体设置为一个Triger:
此时试玩,发现cherry可以穿过,不会阻挡,并且自动执行Unity的私有函数OnTriggerEnter2D(Collider2D collision);
2.2.2 消失
当传入一个碰撞体参数时,通过如下代码使得该对象消失:
Destroy(collision.gameObject);
2.2.3 收集
创建一个public的int参数cherrynum,当触发器函数执行时,首先通过tag判断碰到的是哪个Triger,因此需要先给triger设置一个对应的tag:
完整代码:
private void OnTriggerEnter2D(Collider2D collision) // 当另一个碰撞体进入了触发器 则调用这个函数
{
if (collision.tag == "collection")
{
Destroy(collision.gameObject);
cherrynum += 1;
}
else if ((collision.tag == "conllection_diamond"))
{
Destroy(collision.gameObject);
diamondnum += 1;
}
}
3. Prefab(预设)
当我们费了一番功夫设置好了一个player,一个cherry,想在地图上添加另一个cherry时,我们希望可以直接复制之前设置好各项参数的cherry。因此,prefab诞生了!
我们在Asset文件夹中创建一个空文件夹,命名为“Prefabs”,然后直接将Hierarchy中的player和cherry拖拽进来:
此时,Hierarchy中的player和cherry等都变成了蓝色!证明,我们已经将其设置为了一个预设,后续有需要时,直接再次从Prefabs文件夹中拖拽到Hierarchy中即可;同理,我们可以通过修改Prefabs文件夹中某个对象预设的参数,来直接应用到已经布置在游戏中的各个该对象
而在此时,在Hierarchy已经拥有cherry的前提下,我们想要复制player或者cherry则只需要点击,并按下:
Ctrl + D // 限windows用户
即可实现复制!