Files
aibis-dream/Assets/Plugins/Oscillogram/Oscillogram.cs
T

82 lines
2.2 KiB
C#

using UnityEngine;
using UnityEngine.Events;
using Yarn.Unity;
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;
}
[YarnCommand("heart")]
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;
}
}
}