Unity实现相机跟随
【摘要】 实现相机跟随代码
一、简单的跟随目标位置移动(跟随 2D 或 3D 物体)
1. 创建脚本
2. 代码内容如下
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public Transform target; // 要跟随的目标物体的Transform组件
public float smoothSpeed = 0.125f; // 跟随的平滑速度
private Vector3 offset; // 相机与目标之间的初始偏移量
void Start()
{
offset = transform.position - target.position;
}
void FixedUpdate()
{
// 计算目标的期望位置
Vector3 desiredPosition = target.position + offset;
// 使用平滑插值来平滑相机的移动
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
}
}
在 FixedUpdate
方法(一般用于处理物理相关或需要稳定更新频率的操作)中,先根据目标物体当前位置和偏移量计算出相机期望达到的位置(desiredPosition
)。然后,使用 Vector3.Lerp
(线性插值)函数,按照设定的 smoothSpeed
平滑速度,将相机当前位置逐步过渡到期望位置,实现了相对平滑的跟随效果。
二、跟随目标且看向目标(常用于 3D 场景)
1. 创建脚本
2. 代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollow3D : MonoBehaviour
{
public Transform target;
public float smoothSpeed = 0.125f;
public float distance = 5f; // 相机与目标的距离
public float height = 2f; // 相机相对目标的高度
void FixedUpdate()
{
// 计算相机的目标位置
Vector3 targetPosition = target.position;
targetPosition -= target.forward * distance;
targetPosition.y += height;
// 平滑移动相机到目标位置
Vector3 smoothedPosition = Vector3.Lerp(transform.position, targetPosition, smoothSpeed);
transform.position = smoothedPosition;
// 让相机看向目标
transform.LookAt(target);
}
}
通过 transform.LookAt(target)
语句,让相机的朝向始终对准目标物体,这样可以实现更符合观察逻辑的跟随效果,尤其适用于第三人称视角等 3D 场景的相机控制。
三、限制相机跟随范围(例如在游戏场景边界内跟随)
1. 创建脚本
2. 代码示例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollowWithBounds : MonoBehaviour
{
public Transform target;
public float smoothSpeed = 0.125f;
public float xMin; // X轴最小坐标限制
public float xMax; // X轴最大坐标限制
public float yMin; // Y轴最小坐标限制
public float yMax; // Y轴最大坐标限制
private Vector3 offset;
void Start()
{
offset = transform.position - target.position;
}
void FixedUpdate()
{
Vector3 targetPosition = target.position + offset;
// 限制X轴坐标范围
targetPosition.x = Mathf.Clamp(targetPosition.x, xMin, xMax);
// 限制Y轴坐标范围
targetPosition.y = Mathf.Clamp(targetPosition.y, yMin, yMax);
Vector3 smoothedPosition = Vector3.Lerp(transform.position, targetPosition, smoothSpeed);
transform.position = smoothedPosition;
}
}
通过 Mathf.Clamp
函数分别对 X
轴和 Y
轴的坐标进行限制,使其只能在预先设定的 xMin
、xMax
、yMin
、yMax
范围内变动,防止相机跟随到场景之外或者超出期望的观察区域
根据具体的游戏场景特点和需求,对这些代码示例进行修改完善,比如调整平滑速度、距离、坐标限制等参数,以达到理想的相机跟随效果
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)