public class MusicFade : MonoBehaviour { /* * 挂载在 audiosource 类型的 gameobj 上,使用时调用 objname.FadeMusic(volume, time) */ // Start is called before the first frame update [SerializeField] private AudioSource Music; [SerializeField] private float volumeDelta; [SerializeField] private float targetvolume ; [SerializeField] private bool isfading; void Start() { Music = GetComponent(); volumeDelta = 0; isfading = false; // 修正错误:volDecrease 改为 isfading }

// Update is called once per frame
void Update()
{
    if (!isfading) return;
    if(Mathf.Abs(Music.volume - targetvolume) >= Mathf.Abs(volumeDelta)) // 修正错误:Math.Abs 改为 Mathf.Abs
    {
        Music.volume += volumeDelta; // 修正错误:float 强制转换移除
        Debug.Log('fading...');
    }
    else
    {
        Music.volume = targetvolume;
        isfading = false;
    }
}

public void FadeMusic(float targetVolume/*0-1*/, float durtime/*seconds*/)
{
    Debug.Log('Music fade set target = ' + targetVolume);
    targetvolume = targetVolume;
    if(Music == null) Music = GetComponent<AudioSource>();
    float timedelta = durtime / Time.deltaTime;
    if(timedelta > 0)
        volumeDelta = (targetVolume - Music.volume) / timedelta;
    else
    {
        volumeDelta = (targetVolume - Music.volume);
    }

    isfading = true;
}

public void FadeOut()
{
    FadeMusic(0,1); // 修正错误:fadeMusic 改为 FadeMusic
}

public void FadeIn()
{
    FadeMusic(0.5f,1); // 修正错误:fadeMusic 改为 FadeMusic
}

}

Unity 音乐淡入淡出脚本:修复错误并优化代码

原文地址: https://www.cveoy.top/t/topic/ojMd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录