unity3d简单的震屏效果

2015年03月25日 14:44 0 点赞 0 评论 更新于 2025-11-21 18:32

在 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;
}
}

代码解释

  1. 变量定义

    • shakeTime:震动持续时间,单位为秒。
    • fps:帧率,控制震动的频率。
    • frameTime:帧时间,用于控制相机位置更新的间隔。
    • shakeDelta:震动偏移量,决定了相机每次随机移动的最大距离。
    • cam:相机引用,用于操作相机的位置。
    • isshakeCamera:震动标志位,用于控制是否开始震动。
  2. Start 方法:在游戏开始时初始化所有变量。

  3. Update 方法:每帧调用,检查 isshakeCamera 标志位。如果为 true,则开始震动处理。

    • shakeTime 大于 0 时,减少 shakeTime
    • shakeTime 小于等于 0 时,震动结束,恢复相机原始位置,并重置所有参数。
    • shakeTime 大于 0 时,增加 frameTime。当 frameTime 超过 1.0 / fps 时,更新相机的位置。
  4. shakeCamera 方法:静态方法,用于触发震动效果,将 isshakeCamera 标志位设置为 true

使用方法

  1. 创建一个空的 GameObject,并将 SC_shakeCamera 脚本挂载到该 GameObject 上。
  2. 在脚本的 Inspector 面板中,将需要震动的相机赋值给 cam 变量。
  3. 在需要触发震屏效果的地方,调用 SC_shakeCamera.shakeCamera() 方法。

通过以上步骤,你就可以在 Unity3D 中实现一个简单的震屏效果了。

作者信息

feifeila

feifeila

共发布了 3994 篇文章