Unity 2D游戏开发: 摄像机 Cinemachine 插件

[!tip] 提示
2 D 场景相机需要调整爲 正交模式

管理遊戲中相機、電影及過程動畫

一安裝

在包管理器中安装，集成在遊戲對象及組件中

新建 遊戲對象 -> Cinemachine -> 2D Camera 虛擬攝像機：並不是真的攝像機只是控制主攝像機移動。

拖動 PlayerObject 到 虚拟摄像机對象 -> 檢查器 -> Follow 中

二修改攝像機視野

虚拟摄像机對象 -> 檢查器 -> Lens Ortho Size

三限制攝像機邊緣位置

爲 虚拟摄像机對象 -> 檢查器底部 -> Extensions 添加擴展 Cinemachine Confiner

爲 TileMap對象 添加 2D 物理 -> 多邊形碰撞器

編輯 多邊形碰撞器 边缘细节，勾選 是觸發器：不發生碰撞只觸發碰撞事件

在 虚拟摄像机對象 -> 檢查器 -> Cinemachine Confiner -> Bounding Shape 2D 指定 TileMap對象

四解決移動時抖動

爲 虚拟摄像机對象 添加腳本

using System.Collections;
using System.Collections.Generic;
using Cinemachine;
using UnityEngine;

public class RoundCameraPos : CinemachineExtension
{
public float PixelsPerUnit = 32;

protected override void PostPipelineStageCallback(
CinemachineVirtualCameraBase vcam,
CinemachineCore.Stage stage, ref CameraState state, float deltaTime)
{
// Check to see what stage of post-processing we're in
if (stage == CinemachineCore.Stage.Body)
{
// Get the VC's final position
Vector3 finalPos = state.FinalPosition;

// Call the method we wrote to round the position
Vector3 newPos = new Vector3(Round(finalPos.x), Round(finalPos.y), finalPos.z);
// Set the VC's new position to the difference between the old
// position and the new rounded position that we just calculated
state.PositionCorrection += newPos - finalPos;
}
}

float Round(float x)
{
return Mathf.Round(x * PixelsPerUnit) / PixelsPerUnit;
}
}

五解決移動貼圖黑線

新建 材質

`Shader: Sprites / Default

勾選 Pixel Snap 像素捕捉

對所有 Tilemap 应用材質