游戏开发入门:实现摄像机跟随系统
创作时间:
作者:
@小白创作中心
游戏开发入门:实现摄像机跟随系统
引用
CSDN
1.
https://m.blog.csdn.net/qq_63671405/article/details/143515421
本文将介绍如何在游戏中实现摄像机跟随系统,包括使用Cinemachine插件和自定义脚本两种方式。通过调整阻尼、死区、边界限制等参数,可以实现平滑且可控的摄像机跟随效果。
使用Cinemachine插件实现摄像机跟随
准备工作
首先需要在Unity中安装Cinemachine插件:
- 打开Unity编辑器,进入
Window > Package Manager
- 在Unity Registry中找到Cinemachine并点击Install
安装完成后,在Hierarchy面板中创建一个Virtual Camera:
- 右键点击Hierarchy面板
- 选择
Cinemachine > 2D Camera
设置Virtual Camera的跟随对象:
平滑跟随
通过调整CinemachineVirtualCamera
组件中的Body
列表下的X Damping
和Y Damping
属性,可以控制虚拟摄像机的移动阻尼:
X Damping
:虚拟摄像机在X轴的响应,数值越大反应越慢Y Damping
:虚拟摄像机在Y轴的响应,数值越大反应越慢- 当两个值都为0时,摄像机进行实时跟随
具有死区的跟随
为了防止摄像机在小幅度移动时影响玩家校准,可以设置死区范围:
Dead Zone Width
:水平方向的死区宽度Dead Zone Height
:垂直方向的死区高度
死区指的是跟随目标在该区域以内时,虚拟摄像机不会进行跟随:
有边界限制的跟随
当玩家移动到地图边界时,可以通过添加边界限制来防止摄像机超出地图范围:
- 点击
CinemachineVirtualCamera
组件中的Extensions
列表下的Add Extension
,选择Cinemachine Confiner 2D
- 在Hierarchy面板中创建一个Empty Game Object(例如命名为Border)
- 为Border添加
Polygon Collider 2D
组件并绘制地图边界,设置为触发器 - 将Border拖入
Cinemachine Confiner 2D
组件中的Bounding Shape 2D
属性中
单向不可逆跟随
在追逐战等场景中,可以设计单向跟随:
- 水平方向单向跟随:调整
Screen X
、Screen Y
、Dead Zone Width
和Dead Zone Height
属性,使摄像机只在水平方向向右跟随 - 垂直方向单向跟随:调整相关属性,使摄像机只在垂直方向向上跟随
摄像机晃动
可以通过创建噪声文件资产或使用插件自带的噪声文件来实现摄像机晃动效果:
- 创建噪声配置文件资产:
Assets > Create > Cinemachine > NoisesSettings
- 在
Position Noise
中设置频率和振幅
- 应用噪声配置文件:
- 在
CinemachineVirtualCamera
组件中选择Noise
属性为Basic Multi Channel Perlin
- 选择自己的噪声配置文件资产
插件自带的噪声文件资产包括多种预设效果,如手持摄像机晃动等。
使用脚本实现摄像机跟随
创建变量
新建CameraController
脚本并创建相关变量:
[Tooltip("摄像机跟随目标")]
public Transform target;
[Tooltip("摄像机跟随平滑度")]
[Range(0f, 1f)] public float smoothTime;
[Tooltip("摄像机跟随偏移")]
public Vector3 positionOffset;
[Space]
[Header("轴限制")]
[Tooltip("X轴限制")]
public Vector2 xLimit;
[Tooltip("y轴限制")]
public Vector2 yLimit;
private Vector3 velocity;
摄像机跟随
在LateUpdate()
或FixedUpdate()
中实现摄像机跟随:
- 获取目标位置并进行边界限制
- 使用
Vector3.SmoothDamp()
实现平滑移动
Vector3 targetPosition = target.position + positionOffset;
targetPosition = new Vector3(Mathf.Clamp(targetPosition.x, xLimit.x, xLimit.y), Mathf.Clamp(targetPosition.y, yLimit.x, yLimit.y), -10);
transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
[Tooltip("摄像机跟随目标")]
public Transform target;
[Tooltip("摄像机跟随平滑度")]
[Range(0f, 1f)] public float smoothTime;
[Tooltip("摄像机跟随偏移")]
public Vector3 positionOffset;
[Space]
[Header("轴限制")]
[Tooltip("X轴限制")]
public Vector2 xLimit;
[Tooltip("y轴限制")]
public Vector2 yLimit;
private Vector3 velocity;
private void Start()
{
velocity = Vector3.zero;
}
private void FixedUpdate()
{
Vector3 targetPosition = target.position + positionOffset;
targetPosition = new Vector3(Mathf.Clamp(targetPosition.x, xLimit.x, xLimit.y), Mathf.Clamp(targetPosition.y, yLimit.x, yLimit.y), -10);
transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
}
}
通过以上方法,可以实现多种不同需求的摄像机跟随效果,提升游戏体验。
热门推荐
年味渐浓,春节年货买起来!
广州以235天打破当地最长夏天纪录,这一纪录还将继续刷新
选择体检计划指南 不同年龄层体检重点
如何合理分配初创企业的股权?
胃肠镜结果多久能出来
传承与突破:生肖文化与金银币的历史性碰撞
股票量比:技术分析中的重要指标及其应用
Excel自动执行和表格自动化处理
管材重量计算方法及计算器使用指南
藏红花种植全攻略:从播种到采收的每一个细节
收入计入综合所得的人员中,超七成无需缴纳个税——个人所得税“调高”又“惠低”
可乐鸡翅的甜蜜逆袭!这道家常菜为何让人一口接一口,根本停不下来
安卓和iOS软件开发用什么编程语言
运动是把双刃剑,一不小心易伤腰,骨科医生最推荐的运动是这两种
寻找公众号精准粉丝:定位与内容并重
牙齿健康少花钱!这7个有效呵护牙齿的习惯平时要养成~
老年痴呆原因被揪出:十个老人九个都爱做,劝你尽早改掉
关羽影视形象大盘点:从陆树铭到韩庚,谁最符合你心中的武圣?
【防晒指南】物理防晒 化学防晒 物化混合防晒有何不同?防晒物品怎么挑选?
正史中的诸葛亮与周瑜:才能与命运的比较
八一锐评丨把新装备训练搞扎实
分享自拍照?小心!最新AI看一眼照片就能定位你在哪!
什么食物降血脂,什么食物升血脂,你都知道吗?
十天干「壬水」解析:从性格到运势的全方位解读
监狱改造、社区矫正、安置帮教如何有效联动?杨浦区积极开展探索实践
汽车长时间不开怎样避免电瓶亏电?修理工手把手教你,一看就会!
“诗书画印”:中国画综合艺术之美的深度探索
河童:日本文化中的神秘生物与人与自然关系的象征探索
告别扁平足,选对鞋子重塑完美足弓
刷牙还口臭怎么办?文内深入解析其原因以及应对策略!