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;
}
}
}
脚本说明:
cameraTransform:用于指定要控制的摄像机的Transform组件。如果未指定,将默认使用当前脚本所挂载对象的Transform。fRadio:控制摄像机抖动的幅度,值越大,抖动越剧烈。fShakeCD:抖动的时间间隔,控制抖动的频率。nShakeCount:抖动的总次数,每次抖动后该值减1。fShakeTime:记录上次抖动的时间,用于判断是否达到下一次抖动的时间间隔。setCameraShake():启动摄像机抖动的方法,会随机生成抖动次数并记录摄像机的初始位置。Update():每帧更新时检查是否达到抖动时间间隔且还有抖动次数剩余,如果满足条件则进行一次抖动,并更新摄像机的位置。
通过这个脚本,你可以方便地在U3D项目中实现摄像机的抖动效果。