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

news2024/12/30 3:44:05

一、添加背景音乐

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.coloradmin.cn/o/1912676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI赋能,全面筑牢防线:重点非煤矿山重大灾害风险防控系统探析

一、背景需求 随着工业化和现代化的快速发展&#xff0c;非煤矿山作为重要的资源开采基地&#xff0c;其安全生产问题日益受到社会各界的广泛关注。非煤矿山在开采过程中&#xff0c;面临着诸多重大灾害风险&#xff0c;如滑坡、坍塌、水害、火灾等&#xff0c;这些灾害一旦发…

Start LoongArch64 Alpine Linux VM on x86_64

一、Build from source(build on x86_64) Obtain the latest libvirt, virt manager, and QEMU source code, compile and install them 1.1 Build libvirt from source sudo apt-get update sudo apt-get install augeas-tools bash-completion debhelper-compat dh-apparmo…

【音视频 | RTSP】SDP(会话描述协议)详解 及 抓包例子分析

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

机器视觉理论入门

文章目录 前言一、马尔视觉理论二、图形与图像三、图像基础名词总结 前言 Marr的视觉计算理论立足于计算机科学&#xff0c;系统地概括了心理物理学、神经生理学、临床神经病理学等方面已取得的所有重要成果&#xff0c;是迄今为止最为系统的视觉理论。Marr 的视觉计算理论虽然…

Linux学习——Linux中无法使用ifconfg命令

Linux学习——Linux中无法使用ifconfg命令&#xff1f; &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅…

内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建

知识点&#xff1a; 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源&#xff0c;只要在“网络…

金蝶部署常见问题解决

金蝶部署常见问题解决 金蝶版本&#xff1a; Apusic Application Server Enterprise Edition 9.0 SP8 kbc build 202312041121 报错信息&#xff1a; 与金蝶官方人员沟通&#xff0c;发现lib包版本太低&#xff0c;升级后可正常使用。替换lib包后重启服务。 下载lib: 链接: …

Data-Juicer:阿里巴巴荣誉出品的大模型数据清洗框架

Diffusion Models专栏文章汇总:入门与实战 前言:如何优雅地进行大规模数据清洗是一门艺术,特别对于大模型,数据的质量是决定模型成功最关键的因素之一。阿里巴巴最近开源了一项专门针对大语言模型和视频生成大模型的数据清洗框架,值得关注! 目录 主要特点 数据处理 分…

代理详解之静态代理、动态代理、SpringAOP实现

1、代理介绍 代理是指一个对象A通过持有另一个对象B&#xff0c;可以具有B同样的行为的模式。为了对外开放协议&#xff0c;B往往实现了一个接口&#xff0c;A也会去实现接口。但是B是“真正”实现类&#xff0c;A则比较“虚”&#xff0c;他借用了B的方法去实现接口的方法。A…

大小端详解

引例 我们知道整形(int)是4个字节&#xff0c;例如随便举个例子&#xff1a;0x01020304&#xff0c;它一共占了四个地址位&#xff0c;01,02,03,04分别占了一个字节&#xff08;一个字节就对应了一个地址&#xff09;。 那么就会有个问题&#xff1a;我们的01到底是存储在高地…

Apache Flink核心特性应用场景

Flink的定义 Apache Flink是一个分布式处理引擎&#xff0c;用于处理 无边界数据流&#xff0c; 有边界数据流上金秀贤有状态的计算。Flink能在所有常见的集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算如下Flink官网的一张图 Flink 与Spark的区别 Flink 中处…

Global Mapper:地理信息的温柔探索

引言 在这纷繁复杂的世界里&#xff0c;地理信息系统&#xff08;GIS&#xff09;如同一把利器&#xff0c;帮助我们剖析、理解和改造这个世界。而在众多GIS软件中&#xff0c;Global Mapper无疑是其中的佼佼者。作为一款功能全面且易于使用的GIS应用程序&#xff0c;Global M…

【Python基础】代码如何打包成exe可执行文件

本文收录于 《一起学Python趣味编程》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、安装PyInstaller三、使用PyInstaller打包四、验证打包是否成功五、总结 一、前言 本文介绍如何…

Sharding-JDBC分库分表之SpringBoot主从配置

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 前言 在开发中&#xff0c;如果对数据库的读和写都在一个数据服务器中操作&#xff0c;面对日益增加的访问量&#x…

在Windows中使用开源高性能编辑器Zed(持续更新)

简介 “Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter. It’s also open source.” “Zed是一款高性能的支持多人协作的代码编辑器&#xff0c;由Atom和Tree-sitter的创建者开发。它也是开源的。” Zed主打“高性能”&…

4. kvm存储虚拟化

kvm存储虚拟化 一、命令行工具管理虚拟磁盘1、查看虚拟磁盘2、添加磁盘3、删除磁盘 二、qcow2格式的磁盘文件1、创建磁盘文件2、差量镜像/快速创建虚机2.1 创建差量镜像2.2 准备配置文件2.3 创建虚拟机2.4 批量部署虚拟机 三、存储池 storage pool1、类型2、在线迁移2.1 规划后…

CentOS6用文件配置IP模板

CentOS6用文件配置IP模板 到 CentOS6.9 , 默认还不能用 systemctl , 能用 service chkconfig sshd on 对应 systemctl enable sshd 启用,开机启动该服务 ### chkconfig sshd on 对应 systemctl enable sshd 启用,开机启动该服务 sudo chkconfig sshd onservice sshd start …

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程&#xff0c;因涉及到非结构化数据的相关处理&#xff0c;遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样&#xff0c;可以参考LLM应用构建前…

墨西哥:海外新闻稿媒体分发-海外pr发稿干货分享-大舍传媒

大舍传媒&#xff1a;海外新闻稿媒体分发平台 墨西哥观查者 (mexicoviewer) 墨西哥观查者是墨西哥一家知名的新闻媒体平台&#xff0c;该平台专注于报道墨西哥国内外的时事新闻、政治、经济、文化等多个领域的内容。其更新速度快&#xff0c;报道对象广泛&#xff0c;深受墨西…

WindowsMac共享文件夹设置

共享文件夹设置 共享文件夹设置Windows系统设置步骤一&#xff1a;设置共享文件夹步骤二: 访问共享文件夹 Mac系统中设置共享文件夹步骤一&#xff1a;设置共享文件夹步骤二&#xff1a;访问共享文件夹 小贴士结论 共享文件夹设置 有时需要在多台电脑之间共享文件夹&#xff0…