在一段时间内应用LowPassFilter,然后将其淡入正常状态

本文关键字:常状态 淡入 状态 一段时间 应用 LowPassFilter 然后 | 更新日期: 2023-09-27 17:50:28

我试图达到FPS游戏中被手榴弹击中时的常见效果。当你被击中时,LP过滤器会以低频率启动,等待几秒钟后才会恢复正常。这种效应是如何产生的?我使用c#和Unity 5。我试着用谷歌搜索过,但是关于这个主题的信息似乎很少。

我的代码到目前为止还不是很性感,我已经连续删除了250次了,我开始对自己失去耐心了:p

using UnityEngine;
using System.Collections;
public class DamageHandler : MonoBehaviour {
[Range(5000, 22000)] public int standardLpFreq = 22000;
[Range(10, 500)] public int hitLpFreq = 280;
public float timeToHaveEffect = 4f;
private AudioLowPassFilter lpFilter;
void Awake() {
    lpFilter = Camera.main.GetComponent<AudioLowPassFilter> ();
    if (!lpFilter) {
        Camera.main.gameObject.AddComponent<AudioLowPassFilter>();
        lpFilter = Camera.main.GetComponent<AudioLowPassFilter>();
    }
    InitLPFilter ();
}
private void InitLPFilter() {
    lpFilter.cutoffFrequency = standardLpFreq;
}
}

在一段时间内应用LowPassFilter,然后将其淡入正常状态

在协程中调整LPF截止频率:http://docs.unity3d.com/500/Documentation/Manual/Coroutines.html

public int standardLpFreq = 22000;
public int hitLpFreq = 280;
public float timeToHaveEffect = 4f;
public float damageBeginTime = 0f;
void HandleHit() {
    lpFilter.cutoffFrequency = hitLpFreq;
    damageBeginTime = Time.time;
    StartCoroutine("DamageSoundEffect");
}
IEnumerator DamageSoundEffect() {
    // Wait...
    while (Time.time - damageBeginTime < timeToHaveEffect) {
        yield return null;
    }
    // Restore normal sound
    lpFilter.cutoffFrequency = standardLpFreq;
}

}

如果需要更柔和的扫描,更新循环内的截止。你可以用Mathf。Lerp计算中间截止频率