目录

Luna为游戏添加音效

Luna——为游戏添加音效

1、在GameManager中声明

public AudioSource audiosource;
public AudioClip normalClip;
public AudioClip battleClip;

2、在GameManager资产中挂载“Audio Source”组件,并将该组件挂载到资产脚本中的声明对象

https://i-blog.csdnimg.cn/direct/ae56c3012e3440c09be921dc95ccb5e4.png 这就可以根据不同场景的需要切换背景音乐了,只是靠代码逻辑来执行而已。

3、在GameManager中声明两种音频播放方式

public void playmusic(AudioClip audioClip)
{
    // 检查当前音频源的音频剪辑是否与传入的音频剪辑不同
    if(audiosource.clip != audioClip)
    {
        // 如果不同,则将音频源的音频剪辑设置为传入的音频剪辑
        audiosource.clip = audioClip;
        // 播放音频
        audiosource.Play();
    }
}


public void playsound(AudioClip audioClip)
{
    // 检查传入的音频剪辑是否有效(不为null)
    if (audioClip)
    {
        // 使用AudioSource的PlayOneShot方法播放音频剪辑
        audiosource.PlayOneShot(audioClip);
    }
}

背景音乐由GameManager脚本进行控制,而一些特定音效则是自己在脚本中需要时添加即可

如:进入战斗场景切换战斗背景音乐

    public void EnterOrExitBattle(bool enter=true,int addkillNum=0)
    {
        UImanager.instance.BattleUIshoworhide(true);
        battleground.SetActive(enter);
        monsterHP = 50;
        if (!enter)
        {
            killNum += addkillNum;
            if (killNum > 0)
            {
                DestroyMonster(monsterGo);
            }
            playmusic(normalClip);
            if (lunaCurrentHP <= 0)
            {
                lunaCurrentHP = 100;
                lunaCurrentMP = 0;
                monsterGo.transform.position += new Vector3(0, 2, 0);
            }
          
        }
        else
        {
            playmusic(battleClip); 
        }
        enterBattle = enter;
    }

如luna攻击时,触发战斗音效,在Battlecontrol中声明音效

    public AudioClip attacksound;
    public AudioClip lunaattacksound;
    public AudioClip monsterAttacksound;
    public AudioClip skillsound;
    public AudioClip RecoverHPsound;
    public AudioClip hittensound;
    public AudioClip diesound;
    public AudioClip monsterDieSound;

 IEnumerator performAttacklog()
    {
        UImanager.instance.BattleUIshoworhide(false);
        lunaBattleAnimator.SetBool("move state", true);
        lunaBattleAnimator.SetFloat("move value", 1);

        lunaTrans.DOLocalMove(monsterInitPos + new Vector3(1, 0, 0), 0.5f).OnComplete(
            () =>
            {
                GameManager.instance.playsound(attacksound);
                GameManager.instance.playsound(lunaattacksound);
                lunaBattleAnimator.SetBool("move state", false);
                lunaBattleAnimator.SetFloat("move value", 0);
                lunaBattleAnimator.CrossFade("attack", 0);
                
                monsterSr.DOFade(0.3f, 0.2f).OnComplete(() => { JudgeMonsterHP(-20); });
            }
        );