【Unity2D 2022:Audio】添加游戏音乐和音效

一、添加背景音乐

  1. 创建空的游戏物体,名为BackgroundMusic
  1. 为音频播放器添加音频源(Audio Source)组件
  1. 将背景音乐音频赋值到AudioClip(红色)

  2. 设置循环播放(蓝色)

二、添加草莓拾取音效

  1. 为角色添加音频源组件
  1. 取消勾选Play On Awake选项(即取消游戏开始时自动播放)
  1. 编辑角色脚本

(1)创建音频源对象

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建音频源对象
    public AudioSource audioSource;
}

(2)编写playSound方法播放音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建音频源对象
    public AudioSource audioSource;

    // 播放音效
    public void playSound(AudioClip audioClip)
    {
        audioSource.PlayOneShot(audioClip);
    }

}

PlayOneShot()方法为只播放一次音效

  1. 编辑草莓脚本

(1)创建拾取音效

cs 复制代码
public class Strawberry : MonoBehaviour 
{
    // 创建拾取音效
    public AudioClip pickUpSound;
}

(2)在角色与草莓碰撞的方法中添加播放拾取音效

cs 复制代码
public class Strawberry : MonoBehaviour 
{
    // 创建拾取音效
    public AudioClip pickUpSound;

    // 当角色与草莓发生碰撞时
    private void OnTriggerEnter2D(Collider2D collision)
    {
        Ruby ruby = collision.GetComponent<Ruby>();
        if(ruby != null) {
            if(ruby.healthPoint < ruby.maxHealthPoint) {
                // 播放拾取音效
                ruby.playSound(pickUpSound);
            }
        }
    }

}
  1. 将拾取音效赋值到pickUpSound

三、添加角色受伤音效

  1. 编辑角色脚本

(1)创建Ruby受伤音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建ruby受伤音效
    public AudioClip rubyHitSound;
}

(2)编写changeHealthPoint()方法,当生命改变量小于0(即受到伤害)时,播放角色受伤音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建ruby受伤音效
    public AudioClip rubyHitSound;

    // Ruby改变生命值
    public void changeHealthPoint(int value) 
    {
        if(value < 0) {
            playSound(rubyHitSound);
        }
    }
}
  1. 将角色受伤音效赋值到rubyHitSound

四、添加角色射击音效

  1. 编辑角色脚本

(1)创建Ruby射击音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建ruby射击音效
    public AudioClip rubyShootSound;
}

(2)编写shoot方法,播放ruby射击音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建ruby射击音效
    public AudioClip rubyShootSound;

    // Ruby发射子弹
    private void shoot()
    {
        playSound(rubyShootSound);
    }
}
  1. 将角色射击音效赋值到rubyShootSound

五、添加角色走路音效

  1. 编辑角色脚本

(1)创建行走音频源对象和ruby移动音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建行走音频源对象
    public AudioSource walkAudioSource;
    // 创建ruby移动音效
    public AudioClip rubyWalkSound;
}

(2)用walkAudioSource接收AudioSource组件

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建行走音频源对象
    public AudioSource walkAudioSource;
    // 创建ruby移动音效
    public AudioClip rubyWalkSound;

    void Start() 
    {
        // 用walkAudioSource接收AudioSource组件
        walkAudioSource = GetComponent<AudioSource>();
    }
}

(3) 当Ruby移动且不播放移动音效时,播放角色移动音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建行走音频源对象
    public AudioSource walkAudioSource;
    // 创建ruby移动音效
    public AudioClip rubyWalkSound;

    void Start() 
    {
        // 用walkAudioSource接收AudioSource组件
        walkAudioSource = GetComponent<AudioSource>();
    }

    // 当Ruby移动时
    if(!Mathf.Approximately(move.x, 0) || !Mathf.Approximately(move.y, 0)) {
        if(!walkAudioSource.isPlaying) {
            walkAudioSource.clip = rubyWalkSound;
            walkAudioSource.Play();
        }
    }
}

(4)当Ruby停止移动时,停止播放移动音效

cs 复制代码
public class Ruby : MonoBehaviour 
{
    // 创建行走音频源对象
    public AudioSource walkAudioSource;
    // 创建ruby移动音效
    public AudioClip rubyWalkSound;

    void Start() 
    {
        // 用walkAudioSource接收AudioSource组件
        walkAudioSource = GetComponent<AudioSource>();
    }

    // 当Ruby移动时
    if(!Mathf.Approximately(move.x, 0) || !Mathf.Approximately(move.y, 0)) {
        if(!walkAudioSource.isPlaying) {
            walkAudioSource.clip = rubyWalkSound;
            walkAudioSource.Play();
        }
    } else { // 当Ruby停止移动时
            walkAudioSource.Stop();
    }
}
  1. 把两个音频源组件赋值到audioSource、walkAudioSource
  1. 将角色行走音效赋值到rubyWalkSound中

六、添加机器人走路音效

  1. 为机器人添加Audio Source组件

  2. 将机器人走路音效赋值到AudioClip中

  3. 取消勾选PlayOnAwake属性

七、添加机器人受伤音效

  1. 创建机器人受伤音效数组
cs 复制代码
public class Enemy : MonoBehaviour
{
    // 创建机器人受伤音效数组
    public AudioClip[] enemyHitSounds;
}
  1. 新建一个随机数,为0~机器人受伤音效数组长度之间的随机值,然后随机播放机器人受伤特效数组中的音效
cs 复制代码
public class Enemy : MonoBehaviour
{
    // 创建机器人受伤音效数组
    public AudioClip[] enemyHitSounds;

    // 敌人改变生命值
    public async void changeHealthPoint(int value)
    {
        if(value < 0) {
            // 新建一个随机数,为0~机器人受伤音效数组长度之间的随机值
            int randomNum = Random.Range(0, enemyHitSounds.Length);
            // 随机播放机器人受伤特效数组中的音效
            audioSource.PlayOneShot(enemyHitSounds[randomNum], 40);
        }
    }
}
  1. 将两个机器人受伤音效赋值到enemyHitSounds数组

八、添加机器人修理完成音效

  1. 创建机器人修理完成音效
cs 复制代码
public class Enemy : MonoBehaviour
{
    // 创建机器人修理完成音效
    public AudioClip enemyFixSound;
}
  1. 播放修复完成特效
cs 复制代码
public class Enemy : MonoBehaviour
{
    // 创建机器人修复完成音效
    public AudioClip enemyFixSound;

    // 敌人修复完成
    public void enemyFixed()
    {
        // 播放修复完成音效,100为音效音量放大倍数
        audioSource.PlayOneShot(enemyFixSound, 25);
    }
}
  1. 延迟播放修复完成特效

(1)新建playFixSound方法,将播放修复完成音效的语句移动到playFixSound方法中

cs 复制代码
public class Enemy : MonoBehaviour
{
    // 创建机器人修复完成音效
    public AudioClip enemyFixSound;

    // 敌人修复完成
    public void enemyFixed()
    {

    }

    // 播放敌人修复完成音效
    private void playFixSound()
    {
        audioSource.PlayOneShot(enemyFixSound, 25);
    }
}

(2)使用Invoke方法延迟调用playFixSound方法

cs 复制代码
public class Enemy : MonoBehaviour
{
    // 创建机器人修复完成音效
    public AudioClip enemyFixSound;

    // 敌人修复完成
    public void enemyFixed()
    {
        Invoke("playFixSound", 0.2f);
    }

    // 播放敌人修复完成音效
    private void playFixSound()
    {
        audioSource.PlayOneShot(enemyFixSound, 25);
    }
}

(3) 新建stopAudioSourcePlay方法,将stop语句移动到其中,在playFixSound方法中使用Invoke方法延迟调用stopAudioSourcePlay方法

cs 复制代码
public class Enemy : MonoBehaviour
{
    // 创建机器人修复完成音效
    public AudioClip enemyFixSound;

    // 敌人修复完成
    public void enemyFixed()
    {
        Invoke("playFixSound", 0.2f);
    }

    // 播放敌人修复完成音效
    private void playFixSound()
    {
        audioSource.PlayOneShot(enemyFixSound, 25);
        Invoke("stopAudioSourcePlay", 1.0f);
    }

    // 停用音频源组件
    private void stopAudioSourcePlay()
    {
        audioSource.Stop();
    }
}
  1. 将机器人修复完成音效赋值到enemyFixSound

本章完。感谢阅读!

相关推荐
羊群智妍11 小时前
2026 AI搜索流量密码:免费GEO监测工具,优化效果看得见
笔记·百度·微信·facebook·新浪微博
bugcome_com12 小时前
零基础入门C#:一篇搞懂核心知识点
c#
山岚的运维笔记13 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
小李也疯狂13 小时前
Unity 中的立方体贴图(Cubemaps)
unity·游戏引擎·贴图·cubemap
牛掰是怎么形成的13 小时前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y13 小时前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
EQ-雪梨蛋花汤13 小时前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎
我的offer在哪里14 小时前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎
lpruoyu14 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
wdfk_prog14 小时前
[Linux]学习笔记系列 -- [drivers][mmc][mmc_sdio]
linux·笔记·学习