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

一、添加背景音乐

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.mfbz.cn/a/788157.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Constant expression required (case R.id.xxx)

gradle更新到8.0后&#xff0c;遇到了这个报错 有两种解决方式&#xff1a; 1、在gradle.properties中添加下面代码 android.nonFinalResIdsfalse 2、使用if-else来判断 int id view.getId(); if (id R.id.setting_iv_back) {} else if (id R.id.setting_tv_clear) {}

【组件库】element-plus组件库

文章目录 0. 启动项目1. gc.sh 新增组件2. 本地验证(组件注册的方式)3. 官方文档修改3-1. 左侧菜单3-2 . 配置md文档3-3. 代码问题:文档修改----------------------------------------------4. 将naiveui的split 分割组件【 复制、迁移】到 element-ui-plus组件库4.1 naiveu…

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar 0. 引言1. 关于m_colmap2. 关于m_contfbar3. 结语 0. 引言 本篇介绍下m_map中用于创建和管理颜色映射函数&#xff08;m_colmap&#xff09;和 为轮廓图绘制颜…

从Helm到 Operator:Kubernetes应用管理的进化

&#x1f9f0;Helm 的作用 在开始前需要先对 kubernetes Operator 有个简单的认识。 以为我们在编写部署一些简单 Deployment 的时候只需要自己编写一个 yaml 文件然后 kubectl apply 即可。 apiVersion: apps/v1 kind: Deployment metadata: labels: app: k8s-combat …

【系统架构设计】计算机组成与体系结构(二)

计算机组成与体系结构 计算机系统组成存储器系统前言主存储器存储器存储数量&#xff08;计算&#xff09; 辅助存储器&#xff08;以磁盘为例&#xff09;Cache存储器 流水线 计算机系统组成 存储器系统 前言 存储器用来存放程序和数据的部件&#xff0c;是一个记忆装置&am…

【网络安全的神秘世界】XSS基本概念和原理介绍

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 一、基本概念 恶意攻击者往web页面插入恶意代码脚本&#xff08;JS代码&#xff09;&#xff0c;当用户浏览该页面时&#xf…

泛微开发修炼之旅--36通过js控制明细表中同一列中多个浏览框的显示控制逻辑(明细表列中多字段显示逻辑控制)

文章链接&#xff1a;36通过js控制明细表中同一列中多个浏览框的显示控制逻辑&#xff08;明细表列中多字段显示逻辑控制&#xff09;

0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)

小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了&#xff0c;如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…

安防综合管理/视频汇聚平台EasyCVR视频监控存储技术:高效稳定的视频数据保障方案

随着科技的飞速发展&#xff0c;视频监控已成为现代社会不可或缺的一部分。无论是城市治安、交通管理&#xff0c;还是商业安保、家庭监控&#xff0c;视频监控都发挥着至关重要的作用。而在这背后&#xff0c;视频监控存储技术则是确保监控数据得以长期保存、高效检索和可靠利…

技术速递|VS Code Java 6月更新 - 项目设置功能增强!大量 Spring 新特性

作者&#xff1a;Nick Zhu 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎阅读 Visual Studio Code for Java 的六月更新&#xff01;在这篇博客中&#xff0c;我们将分享项目设置项目的重要更新以及一系列 Spring 的功能改进&#xff0c;让我们开始吧&#xff01; 项目设…

分布式锁(仅供自己参考)

分布式锁&#xff1a;满足分布式系统或集群式下多进程可见并且互斥的锁&#xff08;使用外部的锁&#xff0c;因为如果是集群部署&#xff0c;每台服务器都有一个对应的tomcat&#xff0c;则每个tomcat的jvm就不同&#xff0c;锁对象就不同&#xff08;加锁的机制&#xff0c;每…

(自用)共享单车服务器(二) 项目日志

stdin、stdout、stderr 注意&#xff1a;stderr是不缓存的&#xff0c;stdout则进行行间缓存。接下来我们看下行间缓存的效果&#xff0c;请参考以下代码&#xff1a; #include "stdio.h" #include <unistd.h>int main(int argc, char** argv) {for (int i 0…

万字长文MySQL Binlog 详细指南

目录 第一阶段 MySQL Binlog 基础用法1. Binlog基本概念1.1 什么是Binlog1.2 Binlog的作用1.3 Binlog格式 2. 配置和管理Binlog2.1 开启Binlog2.2 设置Binlog文件大小和保留时间2.3 查看Binlog状态 3. Binlog的实际应用3.1 数据恢复3.2 主从复制3.3 审计 4. Binlog工具使用4.1 …

吴恩达机器学习笔记2.1 - 什么是机器学习

吴恩达机器学习笔记2.1 - 什么是机器学习 最早的机器学习 1959年&#xff0c;亚瑟塞缪尔(Arthur Samuel)将机器学习定义为“Field of study that gives computers the ability to learn without being explicitly programmed”&#xff08;无需编程即可学习的研究领域&#xf…

谷粒商城 - 编写一个自定义校验注解

目录 开始 未来实现效果 第一步&#xff1a;编写自定义校验注解 第二步&#xff1a;编写自定义校验器 第三步&#xff1a;编写配置文件 效果演示 开始 未来实现效果 编写一个 ListValue 注解&#xff0c;可以实现功能有&#xff1a; 限定字段的值&#xff0c;例如指定只…

解读BASE理论:高可用性与性能的完美平衡

Base概念 BASE 理论是一种处理大规模分布式系统中的数据一致性问题的思路。相比于传统的严格一致性&#xff0c;它更灵活&#xff0c;适用于那些需要高可用性和性能的系统。BASE 理论由三个部分组成&#xff1a; 基本可用&#xff08;Basically Available&#xff09; 基本可用…

Unity通过NDK实现C#与C++之间的相互调用

由于一些历史遗留问题&#xff0c;我们项目还在使用一套C实现的Box2D定点数的库&#xff0c;由于最近修改了视野算法所以需要重新打包安卓的【.so】文件&#xff0c;特此记录 1、关于NDK 在Android平台&#xff0c;C/C需通过NDK编译成动态链接库.so文件&#xff0c;然后C#中通过…

天士力“数智本草”大模型如何赋能中药药品研发工作?

天士力“数智本草”大模型如何赋能中药药品研发工作&#xff1f; 目前&#xff0c;“数智本草”大模型如何配合天士力研发工作&#xff1f;对新药研发、中药二次开发等产生了什么价值&#xff1f;能否介绍一些具体的成果案例&#xff1f; “数智本草”大模型目前已经形成智能问…

免费下载工具 -- Free Download Manager(FDM) v6.24.0.5818

软件简介 Free Download Manager (FDM) 是一款免费的功能强大的下载管理软件&#xff0c;适用于多种操作系统&#xff0c;包括 Windows、macOS、Android 和 Linux。这款软件的特色在于它快速、安全且高效的下载能力。它可以下载各种热门网站的影片&#xff0c;支持 HTTP/HTTP…

【内网渗透】MSF渗透阶段的常用指令笔记

目录 渗透阶段划分 msfvenom 常用参数 各平台生成payload命令 Meterpreter Meterpreter的常用命令 基本命令 常用命令 针对安卓手机的一些命令 针对Windows的一些命令 文件系统命令 生成木马反弹shell(以linux靶机为例) 木马生成 配置监控 攻击利用 渗透阶段划分…