Unity3D ——游戏开炮,开枪屏幕震动效果实现

RPG或者动作游戏最重要的就是打击感,好的打击效果可以给游戏增色不少,而一种最方便最简单的提升打击感的效果就是震屏效果,短短几十行代码就可以让我们的游戏效果提升不少。
那么在我们进行游戏战斗场景开发时,常常为了加强临场感,会在有爆炸或者撞击的时候加入震屏的效果,原理其实很简单,就是对场景主相机进行坐标和角度的变化。

话不多说,看一下代码:

// 相机震动效果
using UnityEngine;

public class CameraShakeEffect : MonoBehaviour
{
/// <summary>
/// 相机震动方向
/// </summary>
public Vector3 shakeDir = Vector3.one;
/// <summary>
/// 相机震动时间
/// </summary>
public float shakeTime = 1.0f;  

private float currentTime = 0.0f;
private float totalTime = 0.0f;

public void Trigger()
{
    totalTime = shakeTime;
    currentTime = shakeTime;
}

public void Stop()
{
    currentTime = 0.0f;
    totalTime = 0.0f;
}

public void UpdateShake()
{
    if (currentTime > 0.0f && totalTime > 0.0f)
    {
        float percent = currentTime / totalTime;

        Vector3 shakePos = Vector3.zero;
        shakePos.x = UnityEngine.Random.Range(-Mathf.Abs(shakeDir.x) * percent, Mathf.Abs(shakeDir.x) * percent);
        shakePos.y = UnityEngine.Random.Range(-Mathf.Abs(shakeDir.y) * percent, Mathf.Abs(shakeDir.y) * percent);
        shakePos.z = UnityEngine.Random.Range(-Mathf.Abs(shakeDir.z) * percent, Mathf.Abs(shakeDir.z) * percent);

        Camera.main.transform.position += shakePos;

        currentTime -= Time.deltaTime;
    }
    else
    {
        currentTime = 0.0f;
        totalTime = 0.0f;
    }
}

void LateUpdate()
{
    UpdateShake();
}

void OnEnable()
{
    Trigger();
}

}

接下来咱们看一下设计思路:
1.创建类,带参数构造方法:
2.获得相机的起始位置,方便震动结束之后恢复相机状态:
3.相机震动操作:
这里我直接通过while循环来实现了,当然在MonoBehavior中也可以在Update方法中实现这样的操作,这里为了封装,所以抽离了一些MonoBehavior的特性。
4.震动结束后恢复相机参数:

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值