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

news/2024/7/23 10:27:11 标签: 游戏引擎, unity, c#, 笔记

一、添加背景音乐

1. 创建空的游戏物体,名为BackgroundMusic

2. 为音频播放器添加音频源(Audio Source)组件

3. 将背景音乐音频赋值到AudioClip(红色)

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

二、添加草莓拾取音效

1. 为角色添加音频源组件

2. 取消勾选Play On Awake选项(即取消游戏开始时自动播放)

3. 编辑角色脚本

        (1)创建音频源对象

public class Ruby : MonoBehaviour 
{
    // 创建音频源对象
    public AudioSource audioSource;
}

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

public class Ruby : MonoBehaviour 
{
    // 创建音频源对象
    public AudioSource audioSource;

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

}

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

4. 编辑草莓脚本

        (1)创建拾取音效

public class Strawberry : MonoBehaviour 
{
    // 创建拾取音效
    public AudioClip pickUpSound;
}

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

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);
            }
        }
    }

}

5. 将拾取音效赋值到pickUpSound

三、添加角色受伤音效

1. 编辑角色脚本

        (1)创建Ruby受伤音效

public class Ruby : MonoBehaviour 
{
    // 创建ruby受伤音效
    public AudioClip rubyHitSound;
}

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

public class Ruby : MonoBehaviour 
{
    // 创建ruby受伤音效
    public AudioClip rubyHitSound;

    // Ruby改变生命值
    public void changeHealthPoint(int value) 
    {
        if(value < 0) {
            playSound(rubyHitSound);
        }
    }
}

2. 将角色受伤音效赋值到rubyHitSound

四、添加角色射击音效

1. 编辑角色脚本

        (1)创建Ruby射击音效

public class Ruby : MonoBehaviour 
{
    // 创建ruby射击音效
    public AudioClip rubyShootSound;
}

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

public class Ruby : MonoBehaviour 
{
    // 创建ruby射击音效
    public AudioClip rubyShootSound;

    // Ruby发射子弹
    private void shoot()
    {
        playSound(rubyShootSound);
    }
}

2. 将角色射击音效赋值到rubyShootSound

五、添加角色走路音效

1. 编辑角色脚本

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

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

        (2)用walkAudioSource接收AudioSource组件

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

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

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

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停止移动时,停止播放移动音效

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();
    }
}

2. 把两个音频源组件赋值到audioSource、walkAudioSource

3. 将角色行走音效赋值到rubyWalkSound中

六、添加机器人走路音效

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

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

3. 取消勾选PlayOnAwake属性

七、添加机器人受伤音效

1. 创建机器人受伤音效数组

public class Enemy : MonoBehaviour
{
    // 创建机器人受伤音效数组
    public AudioClip[] enemyHitSounds;
}

2. 新建一个随机数,为0~机器人受伤音效数组长度之间的随机值,然后随机播放机器人受伤特效数组中的音效

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);
        }
    }
}

 3. 将两个机器人受伤音效赋值到Enemy Hit Sounds数组

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

1. 创建机器人修理完成音效

public class Enemy : MonoBehaviour
{
    // 创建机器人修理完成音效
    public AudioClip enemyFixSound;
}

2. 播放修复完成特效

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

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

3. 延迟播放修复完成特效

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

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

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

    }

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

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

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方法

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();
    }
}

3. 将机器人修复完成音效赋值到Enemy Fix Sound

        本章完。感谢阅读! 


http://www.niftyadmin.cn/n/5546490.html

相关文章

vue3项目,表单增删改

效果图 ArticleChannel.vue页面代码 <script setup> import {artGetChannelsService ,artDelChannelService} from /api/article.js import { Edit, Delete } from element-plus/icons-vue //调用open方法&#xff0c;ChannelEdit去修改组件内部类容 import ChannelEdit…

LabVIEW自动测控与故障识别系统

使用LabVIEW 2019在Win10 64位系统上开发自动测控软件&#xff0c;通过与基恩士NR-X100数据采集仪通讯&#xff0c;实时采集和分析数据&#xff0c;自动识别判断产品是否合格&#xff0c;并增加数据记录和仿真功能。 具体解决方案&#xff1a; 1. 系统架构设计 硬件接口&#…

utf8mb4和utf8的不同、若依框架,代码生成器,gitee,前端vue的下载、修复和启动(寻求大佬帮助若依框架三、2.3)

2024.7.9 一、数据库的排序和统一问题。utf8mb4和utf8的不同1.1 发现问题1.2 解决问题-在idea中用sql生成器&#xff0c;生成sql语句&#xff0c;然后在里面修改1.3 utf8和utf8mb4的区别 二、若依前后端框架。代码生成器&#xff08;还没研究懂&#xff0c;但有三个方案&#x…

初识STM32:寄存器编程 × 库函数编程 × 开发环境

STM32的编程模型 假如使用C语言的方式写了一段程序&#xff0c;这段程序首先会被烧录到芯片当中&#xff08;Flash存储器中&#xff09;&#xff0c;Flash存储器中的程序会逐条的进入CPU里面去执行。 CPU相当于人的一个大脑&#xff0c;虽然能执行运算和执行指令&#xff0c;…

量化交易常用名词介绍(七)——模块篇

目录 七、模块篇 1. NumPy 2. pandas 3. matplotlib 4. scikit-learn 5. TensorFlow 6. TA-Lib 7. statsmodels 8. Backtrader 9. PyPortfolioOpt 10. Zipline 七、模块篇 在量化交易中&#xff0c;Python 及其丰富的库生态系统提供了强大的支持。以…

在Pycharm中把jupyter notebook转换成md格式

在Pycharm的控制台输入&#xff1a; jupyter nbconvert --to markdown filename.ipynb这里实际上是用的nvconvert 同理&#xff0c;如果是在vscode中写jupyter&#xff0c;也可以用&#xff1a; jupyter nbconvert --to FORMAT notebook.ipynb将其变成ipynb文件&#xff08;…

Date TimePicker 时间选择器精确限制到时分秒,此刻按钮点击失效处理

今天在开发的时候遇到一个需求&#xff0c;日期时间选择器组件不能选择已经过去的年月日时分秒。用户只能选择当前时间的时间&#xff0c;如果年月日选择是当天之前的时间&#xff0c;时分秒不做限制&#xff0c;如果年月日选择的是当天时间&#xff0c;就要判断时分秒&#xf…

Atom编辑器插件Minimap使用样例

Atom编辑器插件Minimap是一个强大的工具&#xff0c;它为开发者提供了快速、直观的代码预览功能。以下是Minimap的使用样例和一些关键特性的介绍&#xff1a; 1. 安装Minimap 首先&#xff0c;你需要在Atom编辑器中安装Minimap插件。这通常可以通过Atom的插件市场&#xff08…