using UnityEngine; using UnityEngine.Events; public class Oscillogram : MonoBehaviour { [SerializeField] new ParticleSystem particleSystem; [SerializeField] new Rigidbody rigidbody; [SerializeField] [Min(0)] [Tooltip("每分钟跳动次数")] int frequency; [SerializeField] [Tooltip("跳动时施加的力")] float amplitude; [SerializeField] UnityEvent beatEvent; float lastTime; bool isRandomizing = true; int minFrequency=45; int maxFrequency=70; float minAmplitude=1000; float maxAmplitude=1500; void FixedUpdate() { particleSystem.Emit(1); particleSystem.Simulate(Time.fixedDeltaTime, true, false); if (isRandomizing) { // 在范围内随机改变频率和振幅 frequency = Random.Range(minFrequency, maxFrequency); amplitude = Random.Range(minAmplitude, maxAmplitude); } if (Time.fixedTime - lastTime > 60.0f / frequency) { beatEvent.Invoke(); rigidbody.AddForce(Vector3.up * amplitude); lastTime = Time.fixedTime; } } public void SetFrequency(int newFrequency) { frequency = newFrequency; } public void SetAmplitude(float newAmplitude) { amplitude = newAmplitude; } public void ControlHeart(string type) { isRandomizing = true; // 启用随机化 switch (type) { case "normal": minFrequency = 45; maxFrequency = 70; minAmplitude = 1000f; maxAmplitude = 1500f; break; case "quick": minFrequency = 80; maxFrequency = 150; minAmplitude = 1500f; maxAmplitude = 2000f; break; case "slow": minFrequency = 15; maxFrequency = 25; minAmplitude = 500f; maxAmplitude = 700f; break; default: Debug.LogWarning("Unknown heart type: " + type); isRandomizing = false; // 取消随机化 break; } } }