应用LowPassFilter一段时间,然后将其淡化为正常状态?

时间:2015-05-22 13:48:43

标签: c# audio lowpass-filter

当你被手榴弹击中时,我试图达到你在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;
}
}

1 个答案:

答案 0 :(得分:0)

调整协程中的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计算中间截止频率。