ARPG游戏摄像机视野控制脚本---光标、旋转、缓动等效果代码
2015年03月20日 16:39
1 点赞
0 评论
更新于 2025-11-21 17:54
在ARPG游戏开发中,摄像机视野的控制是一个关键部分,它直接影响玩家的游戏体验。本文将详细介绍一个用于控制ARPG游戏摄像机视野的脚本,该脚本实现了光标控制、旋转以及缓动等效果。
脚本代码
using UnityEngine;
using System.Collections;
// 自由旋转相机视角
// 脚本绑定到A空对象,A空对象位于角色脚底,A空对象绑定一个B空对象,B空对象绑定一个摄像机
public class FreeLookCamPractice : AbstractTargetFollowerPractice
{
// 移动速度
[SerializeField] private float moveSpeed = 1;
// 转动速度,范围在0到10之间
[Range(0, 10)]
[SerializeField] private float TurnSpeed = 5.5f;
// 转动平滑值
[SerializeField] private float TurnSmoothing = 0.1f;
// 倾斜最大值
[SerializeField] private float tiltMax = 75;
// 倾斜最小值
[SerializeField] private float tiltMin = 45;
// 隐藏锁定光标
public bool lookCursor = false;
// 看的角度,左右方向
private float lookAngle;
// 倾斜角度,上下方向
private float tiltAngle;
// 枢轴中心点
private Transform pivot;
// 脚本引用
private PersonCharacters character;
// 看的距离
private const float LookDistance = 100;
// 平滑X
private float smoothX = 0;
// 平滑Y
private float smoothY = 0;
// 平滑X速率
private float smoothXvelocity = 0;
// 平滑Y速率
private float smoothYvelocity = 0;
void Awake()
{
// 脚本绑定的游戏物体子对象是枢轴中心,应该在人物头顶,枢轴中心的子对象是相机
pivot = transform.GetChild(0);
}
void Update()
{
HandleRotationMovement();
}
protected override void FollowTarget(float deltaTime)
{
// 插值,脚本位置,玩家位置,time.deltaTime * 1
// 第三参数是0时返回transform.position,1时返回target.position,0.5返回平均数
transform.position = Vector3.Lerp(transform.position, target.position, deltaTime * moveSpeed);
}
void HandleRotationMovement()
{
// 跨平台输入,需要包含脚本,不然就换Input
float x = Input.GetAxis("Mouse X");
// 启用垂直方向的视野改变
// float y = Input.GetAxis("Mouse Y");
// 取消垂直方向的视野改变
float y = 0f;
if (TurnSmoothing > 0)
{
// 平滑阻尼,左右移动平滑,TurnSmoothing是缓冲时间
smoothX = Mathf.SmoothDamp(smoothX, x, ref smoothXvelocity, TurnSmoothing);
// 平滑阻尼,上下移动平滑,TurnSmoothing是缓冲时间
smoothY = Mathf.SmoothDamp(smoothY, y, ref smoothYvelocity, TurnSmoothing);
}
else
{
smoothX = x;
smoothY = y;
}
// Y旋转,左右的,每帧加一点
lookAngle += smoothX * TurnSpeed;
// 转换成欧拉角才能赋值给rotation
transform.rotation = Quaternion.Euler(0, lookAngle, 0);
// 用减是因为,鼠标向下是小于0的值,但向上是要加的
tiltAngle -= smoothY * TurnSpeed;
// 限制倾斜角度在最小值和最大值之间
tiltAngle = Mathf.Clamp(tiltAngle, -tiltMin, tiltMax);
// 旋转B子对象是因为视角要对齐到头顶
pivot.localRotation = Quaternion.Euler(tiltAngle, 0, 0);
// 锁定或解锁光标
Screen.lockCursor = lookCursor;
}
}
代码解释
变量声明
moveSpeed:摄像机跟随目标的移动速度。TurnSpeed:摄像机转动的速度,通过[Range(0, 10)]属性限制其取值范围。TurnSmoothing:转动的平滑值,用于控制摄像机转动的平滑程度。tiltMax和tiltMin:倾斜角度的最大值和最小值,用于限制摄像机的倾斜范围。lookCursor:控制是否隐藏锁定光标。lookAngle和tiltAngle:分别表示摄像机的左右和上下旋转角度。pivot:枢轴中心点,用于调整摄像机的视角。character:脚本引用,可能用于与角色相关的操作。LookDistance:摄像机的看的距离。smoothX和smoothY:用于平滑鼠标输入的X和Y值。smoothXvelocity和smoothYvelocity:平滑X和Y的速率。
方法解释
Awake():在脚本实例被唤醒时调用,用于初始化枢轴中心点。Update():每帧调用一次,调用HandleRotationMovement()方法处理摄像机的旋转操作。FollowTarget(float deltaTime):用于跟随目标,通过Vector3.Lerp方法实现摄像机位置的平滑过渡。HandleRotationMovement():处理摄像机的旋转操作,包括鼠标输入的获取、平滑处理、旋转角度的计算和限制,以及光标锁定的控制。
通过以上脚本,我们可以实现ARPG游戏中摄像机视野的自由旋转控制,同时具备光标控制和缓动效果,为玩家提供更好的游戏体验。