Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

前言:本节主要内容为角色添加跟随相机cinemachine,介绍一下预制体,顺便优化一下跳跃。

 

一、Cinemachine插件

游戏制作到这个阶段,我们已经可以操作角色在场景中奔跑跳跃吃果子了,但我们很快发现角色只能在眼前的固定的屏幕中活动,一旦超出边界角色就看不见了。
这是因为我们当前的相机是固定的,不会随着角色移动。这就需要我们去写代码控制相机随着角色移动而移动,大致思路是在主相机main cinema上挂载一个脚本,把角色的坐标数据传入,在这个脚本中不断刷新相机坐标,保持和角色一致。
实际上这个功能有一个插件Cinemachine,帮我们解决了相机跟随角色移动的问题,这里就简单介绍一下如何使用该插件。

 

1.安装Cinemachine

在工具栏Window -> Package Manager -> Packages:Unity Registry中搜索Cinemachine,下载安装。

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳


2. 创建Cinemachine

安装好后,在Hierarchy窗口右键会多出一个Cinemachine的选项,这里创建一个2D的Cinemachine。

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳


3.添加跟随目标Player

Cinemachine需要设定一个Follow来决定相机是跟随那个目标,这里需要把角色Player设置上去。

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

这时我们再运行游戏操作角色时,就能看到随着角色移动场景也跟着移动。到这一步,我们可以在场景中添加更多地形和环境来让角色活动了。

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

 

二、预制体Perfab

场景变大了,我们需要更多的cherry来角色“吃”。虽然可以通过简单的复制粘贴来增加cherry,但这就有一个问题:如果需要对cherry进行修改,那么场景中有多少cherry就要改多次。
预制体Perfab解决了这个问题,在把游戏中的一个物体改为预制体Perfab时,对这个物体修改就能传递到其他同源的物体上。

1. 一如惯例在Project -> Assets 中创建 Perfabs -> Collections文件夹

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

 

2. 把Hierarchy窗口中的cherry拖拽到这个文件夹中,此时能看到Hierarchy窗口中的cherry变成了蓝色,这说明cherry已经成为了一个预制体。
以后再需要用到cherry布置在游戏中时,直接把Perfabs -> Collections中的cherry拖拽到场景或Hierarchy窗口中就行了。

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳


3.修改预制体有两种方式

a. 在Hierarchy窗口中选中预制体进行修改,修改完后把改动提交到所以其他同源预制体上

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

b.打开预制体Open进行修改,这样改动会自动同步到所有同源预制体上(推荐)

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

打开预制体后显示界面
Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

通过预制体给场景添加更多的cherry吧!
Unity横版2D游戏学习实例(06)- 相机cinemachine&预制体Perfab&二段跳

 

三、二段跳

当角色在场景中活动时,我们会发现有些过高的站台跳不上去,这里可以增加角色的跳跃力jumpForce来解决,当然还有另一种方式更炫酷的方式:二段跳

1. 打开PlayerControl脚本,添加如下代码

public class PlayerControl : MonoBehaviour
{
	private int jumpCount;//添加部分
  
	private void MidAirMovement()//修改整个MidAirMovement
    {
        //角色在地面且y轴速度很小时重置跳跃次数
        if (isOnGround && player_Rbody.velocity.y < 0.1f)
            jumpCount = 2;

        if (isJumpPressed && jumpCount > 0)
        {
            //在空中时减少一次跳跃
            if (!isOnGround)
                jumpCount--;

            isJumpPressed = false;
            if (!isCoruchHeld)
                player_Rbody.velocity = new Vector2(0, jumpForce);//对角色刚体添加纵向的力

            jumpCount--;//每跳一次减少一次跳跃
        }
    }
}

 

至此完成了角色的操作部分,接下来就是敌人设计了。

上一篇:java基础06-变量、常量、作用域


下一篇:论文阅读笔记二十七:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(CVPR 2016)