unity3d简单的震屏效果
在 Unity3D 开发中,震屏效果是一种常见且能有效增强游戏体验的特效。下面我们将详细介绍如何实现一个简单的震屏效果。
实现思路
通过在一定时间内随机改变相机的位置,模拟出屏幕震动的效果。当震动时间结束后,恢复相机的原始位置。
代码实现
using UnityEngine;
using System.Collections;
public class SC_shakeCamera : MonoBehaviour {
// 震动持续时间
private float shakeTime = 0.0f;
// 帧率
private float fps = 20.0f;
// 帧时间
private float frameTime = 0.0f;
// 震动偏移量
private float shakeDelta = 0.005f;
// 相机引用
public Camera cam;
// 震动标志位
public static bool isshakeCamera = false;
// 初始化方法
void Start () {
shakeTime = 1.0f;
fps = 20.0f;
frameTime = 0.03f;
shakeDelta = 0.005f;
}
// 每帧更新方法
void Update () {
if (isshakeCamera) {
if (shakeTime > 0) {
// 减少震动时间
shakeTime -= Time.deltaTime;
if (shakeTime <= 0) {
// 震动结束,恢复相机原始位置
cam.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);
isshakeCamera = false;
// 重置参数
shakeTime = 1.0f;
fps = 20.0f;
frameTime = 0.03f;
shakeDelta = 0.005f;
} else {
// 增加帧时间
frameTime += Time.deltaTime;
if (frameTime > 1.0 / fps) {
// 达到帧率时间,更新相机位置
frameTime = 0;
cam.rect = new Rect(shakeDelta * (-1.0f + 2.0f * Random.value), shakeDelta * (-1.0f + 2.0f * Random.value), 1.0f, 1.0f);
}
}
}
}
}
// 触发震动的静态方法
public static void shakeCamera() {
isshakeCamera = true;
}
}
代码解释
变量定义:
shakeTime:震动持续时间,单位为秒。fps:帧率,控制震动的频率。frameTime:帧时间,用于控制相机位置更新的间隔。shakeDelta:震动偏移量,决定了相机每次随机移动的最大距离。cam:相机引用,用于操作相机的位置。isshakeCamera:震动标志位,用于控制是否开始震动。
Start方法:在游戏开始时初始化所有变量。Update方法:每帧调用,检查isshakeCamera标志位。如果为true,则开始震动处理。- 当
shakeTime大于 0 时,减少shakeTime。 - 当
shakeTime小于等于 0 时,震动结束,恢复相机原始位置,并重置所有参数。 - 当
shakeTime大于 0 时,增加frameTime。当frameTime超过1.0 / fps时,更新相机的位置。
- 当
shakeCamera方法:静态方法,用于触发震动效果,将isshakeCamera标志位设置为true。
使用方法
- 创建一个空的 GameObject,并将
SC_shakeCamera脚本挂载到该 GameObject 上。 - 在脚本的 Inspector 面板中,将需要震动的相机赋值给
cam变量。 - 在需要触发震屏效果的地方,调用
SC_shakeCamera.shakeCamera()方法。
通过以上步骤,你就可以在 Unity3D 中实现一个简单的震屏效果了。