67 lines
1.7 KiB
C#
67 lines
1.7 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
namespace Thousandto.Cinematic
|
|
{
|
|
/// <summary>
|
|
/// 振动效果
|
|
/// </summary>
|
|
public class CinematicShake : MonoBehaviour
|
|
{
|
|
//持续时间
|
|
private float _duration = 2f;
|
|
//振动强度,值越大,频率越小
|
|
private float _strenth = 3f;
|
|
//每一帧位置偏移
|
|
private Vector3 _deltaPos = Vector3.zero;
|
|
//保存之前的位置
|
|
private Vector3 _oldPosition;
|
|
//开始振动标记
|
|
private bool _startShake = false;
|
|
// Use this for initialization
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
public void StartShake(float duration = 2f, float strenth = 3f)
|
|
{
|
|
_duration = duration;
|
|
_strenth = strenth;
|
|
if (strenth <= 0)
|
|
_strenth = 0.1f;
|
|
|
|
_oldPosition = transform.localPosition;
|
|
_deltaPos = Vector3.zero;
|
|
_startShake = true;
|
|
this.enabled = true;
|
|
}
|
|
|
|
private void OnShakeEnd()
|
|
{
|
|
transform.localPosition = _oldPosition;
|
|
this.enabled = false;
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
if (!_startShake) return;
|
|
|
|
if (_duration > 0)
|
|
{
|
|
_duration -= Time.deltaTime;
|
|
transform.localPosition -= _deltaPos;
|
|
_deltaPos = UnityEngine.Random.insideUnitSphere / _strenth;
|
|
transform.localPosition += _deltaPos;
|
|
}
|
|
else
|
|
{
|
|
_duration = 0;
|
|
_startShake = false;
|
|
OnShakeEnd();
|
|
}
|
|
}
|
|
}
|
|
|
|
} |