前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【游戏开发实战】2D游戏摄像机镜头跟随,屏幕边缘限制镜头移动(使用Cinemachine组件)

【游戏开发实战】2D游戏摄像机镜头跟随,屏幕边缘限制镜头移动(使用Cinemachine组件)

作者头像
全栈程序员站长
发布2022-09-01 13:06:11
1.6K0
发布2022-09-01 13:06:11
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

文章目录

一、前言

嗨,大家好,我是新发。 有老铁留言问我能不能写一下2D镜头跟随以及人物移动到屏幕边缘限制镜头的文章,

在这里插入图片描述
在这里插入图片描述

这个功能本来我想用代码自己写,但是我想起了很久以前我看过Unity官方写的一个Cinemachine套件,于是我打算使用它来实现这个功能,话不多说,我们开始吧~

二、场景搭建

为了演示,我先快速搭建一个场景。

1、创建工程

我们先创建一个2D模板的Unity工程,名字叫2DCameraFollowDemo吧~

在这里插入图片描述
在这里插入图片描述
2、创建地图

使用Tilemap和地图生成器生成地图,

请添加图片描述
请添加图片描述

三、主角

1、创建主角

在阿里图库中找个图标作为主角,https://www.iconfont.cn/

在这里插入图片描述
在这里插入图片描述

放到地图中,如下,

在这里插入图片描述
在这里插入图片描述
2、主角移动控制

写个主角控制脚本,代码如下:

代码语言:javascript
复制
using UnityEngine;

public class Player : MonoBehaviour
{ 
   
	// 移动速度
    public float speed = 10;
    Rigidbody2D rigidbody2d;
    Vector2 currentInput;
    
    void Start()
    { 
   
        rigidbody2d = GetComponent<Rigidbody2D>();
    }

    void Update()
    { 
   
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        // 获取键盘输入:A W S D或上下左右键
        currentInput = new Vector2(horizontal, vertical);
    }

    private void FixedUpdate()
    { 
   
        Vector2 position = rigidbody2d.position;
        position = position + currentInput * speed * Time.deltaTime;
        // 通过刚体来移动,防止碰撞抖动
        rigidbody2d.MovePosition(position);
    }
}

挂到主角身上,并添加Rigidbody2D

在这里插入图片描述
在这里插入图片描述

注意Rigidbody2D组件的重力缩放设置为0,否则主角会受到重力而往下掉,把Freeze Rotation Z勾选上,防止主角碰撞时产生Z轴旋转,

在这里插入图片描述
在这里插入图片描述
3、测试主角移动

此时运行Unity,效果如下,可以正常控制主角移动,

请添加图片描述
请添加图片描述

四、摄像机跟随

接下来我们来做摄像机跟随,要用到Cinemachine插件,打开Package Manager,搜索Cinemachine,点击Install

在这里插入图片描述
在这里插入图片描述

插件安装完毕后,在Hierarchy窗口中右键菜单Cinemachine / 2D Camera

在这里插入图片描述
在这里插入图片描述

此时会创建一个虚拟摄像机,

在这里插入图片描述
在这里插入图片描述

我们选中它,赋值Follow为主角物体,如下,

在这里插入图片描述
在这里插入图片描述

此时运行Unity,效果如下,摄像机已经可以跟着主角移动了,

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五、屏幕边缘限制镜头移动

我们可以看到主角移动到地图边缘时,看到了地图外白色的场景,我们想限制镜头的移动范围,让其不超过地图边缘。 选中虚拟摄像机,然后点击Add Extensionselect下拉框,

在这里插入图片描述
在这里插入图片描述

选择CinemachineConfiner

在这里插入图片描述
在这里插入图片描述

它会帮我们挂上CinemachineConfiner组件,可以看到它需要一个形状碰撞体来限定界限,

在这里插入图片描述
在这里插入图片描述

我们创建一个空物体,命名为edge

在这里插入图片描述
在这里插入图片描述

为其添加PolygonCollider2D组件,

在这里插入图片描述
在这里插入图片描述

点击这个按钮可以编辑多边形形状,

在这里插入图片描述
在这里插入图片描述

调整多边形的形状使其与地图边缘吻合,

请添加图片描述
请添加图片描述

记得把多变形碰撞体的Is Trigger勾选上,否则会与主角发生碰撞,

在这里插入图片描述
在这里插入图片描述

最终给虚拟相机赋值Bounding Shape 2D为我们的多边形碰撞体,

在这里插入图片描述
在这里插入图片描述

六、最终效果

最终运行Unity,效果如下,可以看到,主角移动到地图边缘时,摄像机被限制了移动,

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

七、工程源码

本文工程源码我已上传到CODE CHINA,地址:https://codechina.csdn.net/linxinfa/2DCameraFollowDemo 感兴趣的同学可自行下载学习,注:我使用的Unity版本为:Unity 2021.1.9f1c1 (64-bit)

在这里插入图片描述
在这里插入图片描述

好了,就写到这里吧。 我是林新发:https://blog.csdn.net/linxinfa 原创不易,若转载请注明出处,感谢大家~ 喜欢我的可以点赞、关注、收藏,如果有什么技术上的疑问,欢迎留言或私信,拜拜~

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140227.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、前言
  • 二、场景搭建
    • 1、创建工程
      • 2、创建地图
      • 三、主角
        • 1、创建主角
          • 2、主角移动控制
            • 3、测试主角移动
            • 四、摄像机跟随
            • 五、屏幕边缘限制镜头移动
            • 六、最终效果
            • 七、工程源码
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档