大家好,又见面了,我是你们的朋友全栈君。
文章目录
-
-
- 一、前言
- 二、场景搭建
-
- 1、创建工程
- 2、创建地图
- 三、主角
-
- 1、创建主角
- 2、主角移动控制
- 3、测试主角移动
- 四、摄像机跟随
- 五、屏幕边缘限制镜头移动
- 六、最终效果
- 七、工程源码
-
一、前言
嗨,大家好,我是新发。
有老铁留言问我能不能写一下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 Extension
的select
下拉框,
选择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