| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEditor;
- using UnityEngine;
- using UnityEngine.UI;
- public class ScreenShake : MonoBehaviour
- {
- [Header("摄像机")]
- public Camera mainCam;
- [Header("预览")]
- public int previewLevel;
- public bool isPreview;
- [System.Serializable]
- public struct ShakePos
- {
- [Header("第几帧震动到哪儿")]
- public int shakeFrame;
- public Vector2 camPos;
- }
- [System.Serializable]
- public struct ShakeInfo
- {
- [Header("震动等级,按顺序排,从0开始")]
- public int level;
- [Header("震动参数")]
- public int onceShakeFrame; //单次震动帧数
- public List<ShakePos> shakePoses;
- }
- [Header("震动预设")]
- public List<ShakeInfo> shakeInfos;
- private bool isShakeCamera;
- //当前震动信息
- private List<ShakePos> shakePoses;
-
- private float shakeFrame;
- private float pastFrame;
- private void SetCurShakeInfo(int level)
- {
- shakePoses = shakeInfos[level].shakePoses;
- shakeFrame = shakeInfos[level].onceShakeFrame;
- }
- public void ShakeScreen(int level)
- {
- SetCurShakeInfo(level);
- isShakeCamera = true;
- }
- void Update()
- {
- if (isPreview)
- {
- isPreview = false;
- SetCurShakeInfo(previewLevel);
- isShakeCamera = true;
- }
- if (isShakeCamera)
- {
- if (pastFrame > shakeFrame)
- {
- isShakeCamera = false;
- transform.position = Vector2.zero;
- pastFrame = 0;
- }
- else
- {
- foreach (ShakePos sp in shakePoses)
- {
- if (pastFrame == sp.shakeFrame)
- {
- float x = sp.camPos.x;
- float y = sp.camPos.y;
- transform.position = new Vector2(x, y);
- }
- }
- }
- pastFrame += 1;
- }
- }
- }
|