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

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

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

请添加图片描述

请添加图片描述

一、前言

嗨,大家好,我是新发。
有老铁留言问我能不能写一下2D镜头跟随以及人物移动到屏幕边缘限制镜头的文章,
在这里插入图片描述
这个功能本来我想用代码自己写,但是我想起了很久以前我看过Unity官方写的一个Cinemachine套件,于是我打算使用它来实现这个功能,话不多说,我们开始吧~

二、场景搭建

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

1、创建工程

我们先创建一个2D模板的Unity工程,名字叫2DCameraFollowDemo吧~
在这里插入图片描述

2、创建地图

使用Tilemap和地图生成器生成地图,
请添加图片描述

三、主角

1、创建主角

在阿里图库中找个图标作为主角,https://www.iconfont.cn/
在这里插入图片描述
放到地图中,如下,
在这里插入图片描述

2、主角移动控制

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

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.net/140227.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何完全删除sql2012_如何完全删除mysql

    如何完全删除sql2012_如何完全删除mysql更新文章:由于楼主是在2017年写的内容,当时理解问题不深,可能就是稀里糊涂地解决掉了这个问题,把一些没有与SQL相关的东西都删除了,但那时并不影响到其他程序的运行状况。现如今更新下文章,为避免误导大家进行误删一些东西而存在其他问题的隐患。—感谢一位小伙伴的提醒。—更改时间:2019年3月19日工作忙,没能及时回复大家,请谅解!!卸载方法多种,但是通常会有卸载数据库不干净的情况。虽…

    2022年10月2日
    0
  • L2-014列车调度(最长上升子序列LIS)[通俗易懂]

    L2-014列车调度(最长上升子序列LIS)[通俗易懂]原题链接最长上升子序列火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个整数N (2 ≤ N ≤10​5​​ ),下一行给出从1到N的整数序号的一个重排列。数字间

    2022年8月8日
    4
  • iOS的QuickTime Plugin

    当UIWebView播放视频时,可以看到viewhierarchy里有FigPluginView的身影。这个类来自于QuickTimePlugin,plugin的路径为:/Application

    2021年12月24日
    40
  • 计算机与打印机未连接,win7系统无法打印提示似乎未连接打印机的恢复步骤

    计算机与打印机未连接,win7系统无法打印提示似乎未连接打印机的恢复步骤win7系统使用久了,好多网友反馈说win7系统无法打印提示似乎未连接打印机的问题,非常不方便。有什么办法可以永久解决win7系统无法打印提示似乎未连接打印机的问题,面对win7系统无法打印提示似乎未连接打印机到底该如何解决?其实只需要首先我们需要检查一下打印机的驱动是否正常,右键点击桌面上的“此电脑”图标,在弹出菜单中选择“属性”菜单项,这时会打开windows10系统的系统窗口,点击左侧边栏的…

    2022年6月12日
    44
  • TCP粘包,UDP不存在粘包问题[通俗易懂]

    TCP粘包,UDP不存在粘包问题[通俗易懂]有关TCP和UDP粘包消息保护边界from: http://www.cnblogs.com/lancidie/archive/2013/10/28/3392428.html在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方

    2022年8月11日
    5
  • 谨防qq盗号「建议收藏」

    谨防qq盗号「建议收藏」各位朋友们注意了!最近qq盗号现象频繁,本人的同学与老师近两个月总被盗号,要么是发一个所谓的“好友账号申诉网站”,要么就是下图的二维码千万别扫!不知道有没有投诉成功,安全起见还是不要扫码虽然但是,太假了两个问题:1.copyright还是2005到20202.网址不对,QQ空间的网址是qzone.qq.com3.自己细品不管怎么说,请大家一定要谨防qq盗号,防止信息泄露,许多好友包括老师同学都中招了。记住!不明链接不要轻易打开a祝大家周末愉快…

    2022年6月15日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号