通过改变相机的位置实现屏幕震动的效果

    1. /// <summary>
    2. /// 震屏效果脚本
    3. /// 通过设置相机的Viewport Rect 来实现,将下面的脚本挂在相机上,设置enabled=true就可实现屏幕震动效果。
    4. /// </summary>
    5. public class ShakeCamera : MonoBehaviour
    6. {
    7. public float shakeLevel = 3f;// 震动幅度
    8. public float setShakeTime = 0.5f; // 震动时间
    9. public float shakeFps = 45f; // 震动的FPS
    10. private bool isshakeCamera = false;// 震动标志
    11. private float fps;
    12. private float shakeTime = 0.0f;
    13. private float frameTime = 0.0f;
    14. private float shakeDelta = 0.005f;
    15. private Camera selfCamera;
    16. void OnEnable()
    17. {
    18. isshakeCamera = true;
    19. selfCamera = gameObject.GetComponent<Camera>();
    20. shakeTime = setShakeTime;
    21. fps = shakeFps;
    22. frameTime = 0.03f;
    23. shakeDelta = 0.005f;
    24. }
    25. void OnDisable()
    26. {
    27. selfCamera.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);
    28. isshakeCamera = false;
    29. }
    30. // Update is called once per frame
    31. void Update()
    32. {
    33. if (isshakeCamera)
    34. {
    35. if (shakeTime > 0)
    36. {
    37. shakeTime -= Time.deltaTime;
    38. if (shakeTime <= 0)
    39. {
    40. enabled = false;
    41. }
    42. else
    43. {
    44. frameTime += Time.deltaTime;
    45. if (frameTime > 1.0 / fps)
    46. {
    47. frameTime = 0;
    48. selfCamera.rect = new Rect(shakeDelta * (-1.0f + shakeLevel * Random.value), shakeDelta * (-1.0f + shakeLevel * Random.value), 1.0f, 1.0f);
    49. }
    50. }
    51. }
    52. }
    53. }
    54. }