当你被手榴弹击中时,我试图达到你在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;
}
}
答案 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计算中间截止频率。