Files
Continentis/Assets/OtherPlugins/Feel/NiceVibrations/Demo/Common/Scripts/UI/MMUIShaker.cs
SoulliesOfficial d09b58fd80 架构大更
2026-03-20 11:56:50 -04:00

51 lines
1.6 KiB
C#

// Copyright (c) Meta Platforms, Inc. and affiliates.
using System.Collections;
using UnityEngine;
namespace Lofelt.NiceVibrations
{
public class MMUIShaker : MonoBehaviour
{
public float Amplitude;
public float Frequency;
public bool Shaking;
protected Vector3 _initialPosition;
protected RectTransform _rectTransform;
protected Vector3 _shakePosition;
protected virtual void Start()
{
_rectTransform = gameObject.GetComponent<RectTransform>();
_initialPosition = _rectTransform.localPosition;
}
protected virtual void Update()
{
if (!Shaking)
{
_rectTransform.localPosition = _initialPosition;
}
else
{
_shakePosition.x = Mathf.PerlinNoise(-Time.time * Frequency, Time.time * Frequency) * Amplitude -
Amplitude / 2f;
_shakePosition.y =
Mathf.PerlinNoise(-(Time.time + 0.25f) * Frequency, Time.time * Frequency) * Amplitude -
Amplitude / 2f;
_shakePosition.z =
Mathf.PerlinNoise(-(Time.time + 0.5f) * Frequency, Time.time * Frequency) * Amplitude -
Amplitude / 2f;
_rectTransform.localPosition = _initialPosition + _shakePosition;
}
}
public virtual IEnumerator Shake(float duration)
{
Shaking = true;
yield return new WaitForSeconds(duration);
Shaking = false;
}
}
}