

文章目錄
- 一、前言
- 二、場景搭建
- 1、創建工程
- 2、創建地圖
- 三、主角
- 1、創建主角
- 2、主角移動控制
- 3、測驗主角移動
- 四、攝像機跟隨
- 五、螢屏邊緣限制鏡頭移動
- 六、最終效果
- 七、工程原始碼
一、前言
嗨,大家好,我是新發,
有老鐵留言問我能不能寫一下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 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://www.uj5u.com/qita/294795.html
標籤:其他
上一篇:【Unity3D插件】“我敢說,這是你見過最多的插件合集”Unity插件分享不斷更新中。。。
下一篇:P1057傳球游戲 題解
