U3D摄像机 抖动脚本

2015年01月14日 10:23 0 点赞 0 评论 更新于 2025-11-21 14:19

在Unity 3D(U3D)开发中,实现摄像机抖动效果是一个常见的需求,比如在游戏中表现爆炸、地震等场景时可以增强沉浸感。下面为你详细介绍一个U3D摄像机抖动脚本的实现。

public class CameraShake : MonoBehaviour
{
// 摄像机的Transform组件,用于控制摄像机的位置
public Transform cameraTransform;

// 抖动的幅度,值越大抖动越剧烈
public float fRadio;

// 记录摄像机当前的位置
private Vector3 mCurrentPosition;

// 抖动的时间间隔,控制抖动的频率
private float fShakeCD = 0.001f;

// 抖动的次数
private int nShakeCount = 0;

// 记录上次抖动的时间
private float fShakeTime;

// 启动摄像机抖动的方法
public void setCameraShake()
{
// 如果未指定摄像机的Transform组件,则默认使用当前脚本所挂载对象的Transform
if (cameraTransform == null)
{
cameraTransform = transform;
}

// 记录摄像机的初始位置
mCurrentPosition = cameraTransform.position;

// 随机生成抖动的次数,范围在5到10之间
nShakeCount = Random.Range(5, 10);

// 输出抖动次数和抖动幅度的调试信息
Debug.Log(string.Format("nShakeCount= {0}, fRadio = {1}", nShakeCount, fRadio));
}

// 每帧更新时调用的方法
void Update()
{
// 判断是否达到抖动时间间隔且还有抖动次数剩余
if (fShakeTime + fShakeCD < Time.time && nShakeCount > 0)
{
// 减少一次抖动次数
nShakeCount--;

// 随机生成一个抖动的偏移值,范围在 -fRadio 到 fRadio 之间
float radio = Random.Range(-fRadio, fRadio);

// 当抖动次数只剩1次时,将偏移值设为0,使摄像机回到初始位置
if (nShakeCount == 1)
{
radio = 0;
}

// 更新上次抖动的时间
fShakeTime = Time.time;

// 根据偏移值更新摄像机的位置
cameraTransform.position = mCurrentPosition + Vector3.one * radio;
}
}
}

脚本说明:

  1. cameraTransform:用于指定要控制的摄像机的Transform组件。如果未指定,将默认使用当前脚本所挂载对象的Transform
  2. fRadio:控制摄像机抖动的幅度,值越大,抖动越剧烈。
  3. fShakeCD:抖动的时间间隔,控制抖动的频率。
  4. nShakeCount:抖动的总次数,每次抖动后该值减1。
  5. fShakeTime:记录上次抖动的时间,用于判断是否达到下一次抖动的时间间隔。
  6. setCameraShake():启动摄像机抖动的方法,会随机生成抖动次数并记录摄像机的初始位置。
  7. Update():每帧更新时检查是否达到抖动时间间隔且还有抖动次数剩余,如果满足条件则进行一次抖动,并更新摄像机的位置。

通过这个脚本,你可以方便地在U3D项目中实现摄像机的抖动效果。

作者信息

feifeila

feifeila

共发布了 3994 篇文章