“声音”音源设置和音效播放

学习如何使用音效系统,背景音乐和其他特别的音效,跳跃攻击等等

学习如何在unity当中使用整套的音效系统,使用之前,我们先来确定一下我们要使用的音乐和音效,在Unity Asset Store当中搜索,添加到我们的unity当中

在unity中下载导入资源

音效全部导入

背景音乐只导入第一个

在Project中创建一个新的文件夹,起名为Audio;将导入的音频添加到这个文件夹下方

这些音乐和音效我们都可以点击,然后在屏幕右侧,点击屏幕右下角的双横线,然后就可以播放了

接下来我们来实现这些音频的资源

添加一个新物体,在Hierarchy窗口Create Empty,命名为Audio Manager;放入manager的分类下边

在Add Component--Audio(这个分类里面有非常多的内容;Audio Listener,可以听到所有的内容,但是需要一个媒体来播放音乐,就是Audio Source一个音频资源,在资源当中可以播放不同的声音片段,例如攻击跳跃等等)

我们首先先看一下我们的Main Camera 中,默认有Audio Listener组件,代表我们的摄像机就是耳朵,走到哪听到哪

接下来我们到场景当中去放置音源,然后用这些音源来播放不同的声音片段,就能够实现音效的效果了

在我们这个2D项目当中,我们直接在Audio Manager身上挂载音源,来持续不断地播放就好了

摄像机上有Audio Listener原因就是有时候可以使用一些3D的音效,只有走进的时候,才会播放,这样的话,我们就会挂载特殊的物体身上,比如野猪来回巡逻的时候,可能会发出喘息声和走路的声音,在他身上会有一个移动的音效,他也有一定的范围,只有我们的摄像机进入这个范围之后,才能够监听这个音效,

接下来我们来简单设置一下,学习如何来使用这些组件

首先在Audio Manager上面添加Audio Sorce

里面有非常多的内容(Audio Clip音频片段,Play On Awake运行游戏时自动播放,Loop循环)

下面还要有关于3D的音效暂时不用;BGM背景音乐要循环播放,且在游戏一开始就播放;可以添加音乐片段到Audio Clip中,运行测试一下效果

我们其他的音效,攻击跳跃等等,不会持续不断的播放,也不会在游戏一开始就播放,所以我们再添加另外一个Audio Source,这个取消勾选Play On Awake和Loop,用这个来播放其他的音效

然后,我们要用代码来控制什么时候把哪个片段放到对应的Audio Source里面去播放来实现我们想要的效果

在Script文件夹下再创建一个文件夹Audio,在此文件夹内创建一个代码AudioManager(音频管理脚本)

创建好了之后,将代码挂载到我们的Audio Manager身上

我们要在不同的AudioSource里面播放不同的片段,首先要获得这两个不同的AudioSource

打开代码进行编写

想要使用音频相关的内容,要调用这个命名空间UnityEngine.Audio(此命名空间为了使用AudioMixer),这样我们就可以使用所有的Audio的组件了

然后我们继续创建变量,首先是AudioSource,一个BGMSource,一个FXSource

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;public class AudioManager : MonoBehaviour
{public AudioSource BGMSource;public AudioSource FXSource;
}

保存返回unity

对这两个变量进行赋值

首先将标记Loop的AudioSource拖拽进去;不被标记的拖拽到FXSource

实现游戏音乐和音效的播放方式有非常多的方法,根据不同的项目有不同的实现功能

我们先以攻击为例子,找到Player--Attack1,2,3;每次启动的时候,我们都要播放一下这个音效,所以我们可以把要播放的音效直接挂载这三个身上,然后用他们去通知我们的AudioManager接下来要播放这个音效了(跨代码,跨物体的播放和传递数据,创建Event事件的方法,通过这个事件,同时带着我们的这个变量参数传递进去)

还是要用ScriptableObject的方法,在ScriptableObject文件夹下创建代码PlayAudioEventSO(传递音频文件的事件)

打开代码

先调用UnityEngine.Event

代码中要实现的是ScriptableObject

在上方使用CreateAssetMenu

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;[CreateAssetMenu(menuName ="Event/PlayAudioEventSO")]
public class PlayAudioEventSO : ScriptableObject
{}

接下来创建我们的unity Action,传递进来的变量类型就是每一个Audio Clip

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;[CreateAssetMenu(menuName ="Event/PlayAudioEventSO")]
public class PlayAudioEventSO : ScriptableObject
{public UnityAction<AudioClip> OnEventRaised;public void RaiseEvent(AudioClip audioClip){OnEventRaised?.Invoke(audioClip);}
}

这样我们就写好了这个事件方法

保存返回unity

在事件文件夹当中,我们来创建Event;先创建一个叫做FX Audio Event SO,在创建一个BGM Audio Event SO

可以看到我们用同一个类型的ScriptableEvent “PlayAudioEventSO”,可以创建多个资源文件,那么分别来播放不同的音效和背景音乐

我们先以Attack为例子,我们要在它身上标记Clip,而且我要通过时间的方式进行广播,所以我们要创建一个单独的代码,来标记我所使用的音乐,起名为AudioDefination(音频自定义脚本)在Audio文件夹下创建

然后将这个代码挂载在Attack1,2,3这三个物体上

打开代码,进行编写

首先我们要通过一个事件的方式,进行广播来传递,我们先来创建一下这个事件playAudioEvent,然后我们还要有音频的片段,还希望有一个布尔值的判断,判断这个内容是不是一开始就播放(FX不会在一开始就执行,所以要用在OnEnable当中去执行这个方法)

勾选Play OnEnable,那么就在OnEnable当中去播放这个音乐

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioDefination : MonoBehaviour
{public PlayAudioEventSO PlayAudioEvent;public AudioClip audioClip;public bool playOnEnable;private void OnEnable(){}}

具体的音乐如何播放,我们创建一个单独的函数方法PlayAudioClip,如何我们让我们的PlayAudioEvent OnEventRaised把我们的AudioClip传递进去,这样我们就成功的传递了这个片段

如果我们要在这个物体启动的时候播放的话,我们来判断一下,如果Play OnEnable就PlayAudioClip

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioDefination : MonoBehaviour
{public PlayAudioEventSO PlayAudioEvent;public AudioClip audioClip;public bool playOnEnable;private void OnEnable(){if (playOnEnable)PlayAudioClip();}public void PlayAudioClip(){PlayAudioEvent.RaiseEvent(audioClip);}
}

保存返回unity

首先这三个物体所要使用的这个PlayAudioEvent就是FX的Events,我们希望通过这个事件的通道将音效传递过去

Attack1,选择音效46;Attack2,3选择47

这三个都要勾选上Play OnEnable,这个物体一激活,inspector窗口显示出来,就要播放我们的音效,

广播有了,接下来回到AudioManager代码当中添加对应的监听,

创建两个同样类型的监听

监听的时候我们就要加入这个事件,把函数注册到这个事件的启动当中,OnDisable注销这个函数方法

用编译器帮助生成OnFXEvent,将clip传递进来,当前clip为这个clip,然后让器进行播放play单次播放

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;public class AudioManager : MonoBehaviour
{[Header("事件监听")]public PlayAudioEventSO FXEvent;public PlayAudioEventSO BGMEvent;public AudioSource BGMSource;public AudioSource FXSource;private void OnEnable(){FXEvent.OnEventRaised += OnFXEvent;}private void OnDisable(){FXEvent.OnEventRaised -= OnFXEvent;}private void OnFXEvent(AudioClip clip){FXSource.clip = clip;FXSource.Play();}
}

保存返回unity,

把AudioManager上的事件监听添加进去

运行测试,注意观察FX AudioSource会自动获得Clip

回到代码,再写一个函数的方法,添加BGM

我们希望每一个场景当中都有一个空物体告诉我们的AudioManager当前要播放的音乐是啥;我们继续创建这个方法,把它加到我们的这个事件当中

这个新创建的函数方法和我们刚才实现的是一样的,只不过变成了BGM

现在我们就成功写好了我们的AudioManager,有了事件的监听,给变量也简单做一个分类

public class AudioManager : MonoBehaviour
{[Header("事件监听")]public PlayAudioEventSO FXEvent;public PlayAudioEventSO BGMEvent;[Header("组件")]public AudioSource BGMSource;public AudioSource FXSource;private void OnEnable(){FXEvent.OnEventRaised += OnFXEvent;BGMEvent.OnEventRaised += OnBGMEvent;}private void OnDisable(){FXEvent.OnEventRaised -= OnFXEvent;BGMEvent.OnEventRaised -= OnBGMEvent;}private void OnBGMEvent(AudioClip clip){BGMSource.clip = clip;BGMSource.Play();}private void OnFXEvent(AudioClip clip){FXSource.clip = clip;FXSource.Play();}
}private void OnFXEvent(AudioClip clip){FXSource.clip = clip;FXSource.Play();}
}

保存返回unity

BGM我们要怎样做呢(目前我们只有一个场景,后续还需要创建下一个场景)

在这个场景当中,我们场景一个新的GameObject-Create Empty,命名为BGM,在这个物体上只挂载我们的Audio Definition,所添加的事件就是BGMAudioClip,AudioClip我们就选择我们要使用的BGM的那个背景音乐,勾选Play OnEnable

运行游戏测试一下

还无法实现BGM,因为我们还没有使用场景的加载,所以一个场景加载的时候,所有的物体会被重新启动,我们将BGM关掉,重新启动一下就会有背景音乐

这样我们就成功播放了这个音乐

这个音效有的时候,我们不容易控制它的声音的大小,稍后我们制作一个暂停的菜单来控制整体的音效

我们先学习如何把不同的音效输入到不同的轨道,然后进行混音的输出,所以接下来我们要学习的重要内容就是AudioMixer

window菜单--Audio--AudioMixer(混音台)打开这个窗口

可以上下调节音乐,然后将他们整体输出

接下来,我们要来创建一下AudioMixer,在Setting文件夹下创建一个新文件夹AudioMixer

点击“ + ”,创建一个AudioMixer文件,他也是一个资产文件,起名为MainMixer

选中MainMixer,我们就可以在AudioMixer的窗口下看到它的内容

目前只有一个轨道MainMixer主输出的音轨,然后我们希望有多条音轨,一个是监听我们的BGM,一个是监听FX;很可能我们还需要监听其他各种各样的功能,比如人声或者环境音,白噪音等等

那我们用Groups添加子轨道,目前只有一个Master,点击“ + ”;然后就会创建一个子轨道起名为BGM;再次选中Master,点击“ + ”,这样会创建一个平级的子轨道起名为FX

我们选择AudioManager物体,接下来我们来看看这两个AudioSource组件下有一个选项OutPut,要把当前这个音源输出到AudioMixer的哪个Groups

第一个是BGM,第二个是FX

无论你的声音效果怎么样,我们都可以通过调音台去调整整体的音量

还可以使用主音轨输出,调节整个游戏的声音,一半游戏都会有音量条件;我们把主音轨的音量拉下来,那么BGM和FX的声音都会减小;拉大都会拉大(还可以通过很多其他的方式来调整我慢慢的音效)

目前我们可以运行测试一下;可以根据自己的要求调整一下音效

再做一个小调整

我们的野猪在一开始播放的时候,他会有一个暂停,然后马上一个回头

打开一下Enemy的代码,一开始的waitTimeCounter,一旦这个waitTime大于0的话,他就会持续不断地在这TimeCounter中进行相减,所以我们要把这个注销掉,不在一开始的时候给他重置时间,这样他会一开始的时候就正常走动

有的时候我们的设备在播放这个项目的时候,摄像机跟随人物移动会有一些类似的抖动;如果你认为画面有抖动的感觉,可以选择mainCamera,在inspector窗口--Update Method更新的方式;默认情况下选择的是Smart Update,可以改成Fixed Update,抖动的效果会好一些,根据需求去修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455774.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解Oracle审计(二)

题记&#xff1a; 本文将承接上篇详细介绍oracle的审计功能&#xff0c;基于11g版本&#xff0c;但对12c&#xff0c;19c也同样适用。 1. 语句审计实操演示实例 sqlplus / as sysdba show parameter audit_trail alter system set audit_traildb_extended scopespfile; star…

OpenCV和HALCON

OpenCV和HALCON是两种广泛用于图像处理和计算机视觉的开发库&#xff0c;它们各有优缺点&#xff0c;适合不同的应用场景。以下是两者的比较&#xff1a; 1. 开发背景与定位 OpenCV (Open Source Computer Vision Library)&#xff1a; 开源库&#xff0c;最初由Intel开发&…

Gitlab 完全卸载–亲测可行

1、停止gitlab gitlab-ctl stop2.卸载gitlab&#xff08;注意这里写的是gitlab-ce&#xff09; rpm -e gitlab-ce 3、查看gitlab进程 ps aux | grep gitlab 4、杀掉第一个进程&#xff08;就是带有好多.............的进程&#xff09; 5、删除所有包含gitlab文件 find / …

【计网】深入理解网络通信:端口号、Socket编程及编程接口

目录 1.端口号 1.1.理解源 IP 地址和目的 IP 地址 1.2.认识端口号 1.3.端口号范围划分 1.4理解 "端口号" 和 "进程 ID" 2.socket编程 2.1.理解 socket 2.2.socket编程的概念 2.3. 传输层的典型代表 认识 TCP 协议 认识 UDP 协议 2.3 网络字节序…

基于Multisim的水位测量电路设计与仿真

1.利用LED指示灯显示水位&#xff08;最低水位、1/4、1/2、3/4、最高水位&#xff09;。 2.达到最高水位时&#xff0c;自动报警。

探索Python与Excel的无缝对接:xlwings库的神秘面纱

文章目录 探索Python与Excel的无缝对接&#xff1a;xlwings库的神秘面纱1. 背景介绍&#xff1a;为何选择xlwings&#xff1f;2. xlwings是什么&#xff1f;3. 如何安装xlwings&#xff1f;4. 简单的库函数使用方法打开工作簿创建工作簿读取单元格数据写入单元格数据保存并关闭…

消息会话—发送消息自动滚动到最底部

背景 在项目开发中&#xff0c;实现用户友好的输入交互是提升用户体验的关键之一。例如&#xff0c;在消息会话页面中&#xff0c;为了确保用户在发送新消息后页面能自动滚动到最底部&#xff0c;从而始终保持最新消息的可见性&#xff0c;需要实现自动滚动功能。这不仅提升了…

Spring Boot集成:高效论坛网站的构建

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理论坛网站的相关信息成为必然。开发合适的论…

【GISBox使用指南】免费实现影像切片的工具,还支持多种格式服务发布!

一、什么是影像数据&#xff1f; 在地理信息系统中&#xff0c;影像数据是指通过遥感技术、摄影测量或其他成像手段获取的&#xff0c;以数字形式存储的地理空间图像信息。这些数据涵盖了从卫星遥感影像、航空摄影影像到地面摄影影像等多种类型&#xff0c;在GIS中的应用广泛而…

知乎付费投流怎么做?如何投放知乎广告?

知识经济背景下&#xff0c;知乎凭借其高质量的内容和精准的用户群体&#xff0c;成为了品牌营销的新蓝海。作为国内领先的知识分享平台&#xff0c;知乎汇聚了大量高学历、高收入、高消费能力的用户&#xff0c;他们对新知识、新产品有着强烈的好奇心和探索欲&#xff0c;是品…

成功解决pycharm软件中按住Ctrl+点击指定函数却不能跳转到对应库中的源代码

成功解决pycharm软件中按住Ctrl点击指定函数却不能跳转到对应库中的源代码 目录 解决问题 解决方法 解决问题 在pycharm软件中按住Ctrl点击指定函数却不能跳转到对应库中的源代码 解决方法

github pages + hugo 搭建静态博客网站

体验地址 1. 起因&#xff0c; 目的: 其实6年前&#xff0c;我就写过这个。 项目代码 博客地址 最近想改写一下。 github 推荐的主题是 Jekyll&#xff0c; 我当时用的就是这个&#xff0c;感觉很麻烦。尤其是文章命名。 新的主题 hugo 用起来还行。 2.过程: 过程记录&am…

比较相同机器上 redis和mysql分别单独承载的 最大连接数量

在相同的机器上&#xff0c;Redis 和 MySQL 的最大连接数量会受到硬件配置&#xff08;如 CPU、内存、网络等&#xff09;、配置参数和应用场景的影响。以下是对 Redis 和 MySQL 在单机环境下最大连接数的比较&#xff1a; Redis 最大连接数量 默认配置&#xff1a; Redis 默…

轻松掌握Win10录屏技巧:四大神器推荐!

在Win10系统中&#xff0c;录屏功能的应用越来越广泛&#xff0c;无论是用于工作演示、在线教学还是游戏分享&#xff0c;一款好用的录屏软件都是必不可少的。今天&#xff0c;我们将推荐四款录屏工具&#xff01; 福昕录屏大师 直达链接&#xff1a;www.foxitsoftware.cn/RE…

iOS--利用UITableViewDataSourcePrefetching实现平滑如丝的无限滚动

前言&#xff1a; 相信大家在网络不好的时候使用列表分页的App会获得非常不好的体验&#xff0c;由于网络的问题&#xff0c;会有明显的卡顿&#xff0c;就像抖音等App&#xff0c;那么我们是否能使用一些手段来优化这个体验呢&#xff1f;这里可以用到UITableView中另一个协议…

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、tiff格式批量转webp格式

在Linux系统中&#xff0c;使用ImageMagick可以图片格式转换&#xff0c;其中最常用的是通过命令行工具进行。 ImageMagick是一个非常强大的图像处理工具集&#xff0c;它包含了许多用于图像转换的命令。 一、安装ImageMagick&#xff08;如果尚未安装&#xff09;&#xff1…

蓝牙资讯|iOS 18.1 正式版下周推送,AirPods Pro 2耳机将带来助听器功能

苹果公司宣布将在下周发布 iOS 18.1 正式版&#xff0c;同时确认该更新将为 AirPods Pro 2 耳机带来新增“临床级”助听器功能。在启用功能后&#xff0c;用户首先需要使用 AirPods 和 iPhone 进行简短的听力测试&#xff0c;如果检测到听力损失&#xff0c;系统将创建一项“个…

MoCoOp: Mixture of Prompt Learning for Vision Language Models

文章汇总 当前的问题 1)数据集风格变化。 如图1所示&#xff0c;对于一个数据集&#xff0c;单个软提示可能不足以捕获数据中呈现的各种样式。同一数据集中的不同实例可能与不同的提示符兼容。因此&#xff0c;更**自然的做法是使用多个提示来充分表示这些变化**。 2)过拟合…

101. UE5 GAS RPG 实现范围技能奥术爆发表现

在上一篇文章里&#xff0c;我们实现了范围技能的范围指示功能。范围指示是在释放技能前&#xff0c;确认技能的攻击范围&#xff0c;在确认位置后&#xff0c;通过额外按键进行触发技能释放。 在这一篇里&#xff0c;我们将先实现在技能里使用范围指示&#xff0c;并能够播放对…

硬件基础知识补全计划【一】电阻

一、电阻理论 1.1 电流定义 电流&#xff1a;电流的强弱用电流强度来描述&#xff0c;电流强度是单位时间内通过导体某一横截面的电荷量&#xff0c;简称电流&#xff0c;用I表示。1 秒内有 6.241509310^18 个元电荷通过横截面的电流&#xff0c;定义为 1 安 (A)。 电压&…