Unity Audio -- (3)创建3D音效

news2024/9/23 15:22:37

        本节会添加场景中小瀑布的音效。小瀑布的音效会有一个作用范围,也会根据角色所处的位置不同,产生不同的效果。

添加小瀑布的声音

        1. 在Hierarchy中,点击右键,选择Audio -> Create Audio Source,将这个新的Audio Source名字设为“Waterfall Audio”。

        2. 在场景试图中,移动Audio Source到小瀑布的底部,在池子和瀑布接触的位置。

        3. 找到AmbientWater音频片段(Assets > CreativeCore_Audio > Audio目录下),将它添加到Audio Source的Audio Clip变量中(推动或者点击浏览按钮选择)。

            场景中的小瀑布的音效,只要场景是激活状态,就应该一直保持播放状态。

        4. 我们将Audio Source组件的Loop勾选上,让音频无限循环播放。

        5.  运行场景。

                我们会听到瀑布的声音会一直持续,但它的音量并不会随着player和瀑布的距离变化而变化。这是因为Audio Source当前被设置为了2D。一般来说,场景中类似瀑布的声音源是存在于3D空间中的,因此Audio Source需要进一步调整。

        6. 退出Play模式。

        7. 设置Audio Source的Spatial Blend属性为3D。

                当这个属性设置为3D后,audio source的体积的最小和最大距离(场景视图中Audio Source的两个球体)就会起作用了。

         8. 调整一下Audio Source的minimum distance和maximum distance属性,这个覆盖范围可以通过场景试图来看,调整到合适的范围即可。

        9. 示例中的maximum distance大概设置为了10。

         尝试运行看看效果,玩家要进入这个范围后才会有声音,并且音量会发生变化。

调整声音的扩散角度

        在进入下一项瀑布Audio Source的调整前,我们先来做个小实验:

        1. 进入Play模式。

        2. 移动到Audio Source的Max Distance的外边界,然后将角色转到左边和右边,注意声音有什么变化。

                当角色转向左边时,声音似乎平移到了右边的扬声器中(可以理解为角色右边耳朵更靠近音源),左边扬声器的声音显著降低或者完全消失。当角色转向右边时,声音在左边更加明显。我们最好使用耳机来感受这个实验的效果。

                我们听到的声音差异,是由3D声音设置里的Spread值所控制的。默认情况下,这个值是0,意味着扬声器所发出的声音是完全基于音源的位置信息的。从技术角度看这种行为是能讲通的,但实际效果却会显得很不和谐,因为声音就像是从一个扬声器跳到了另一个扬声器去了。

        3. 仍然在Play模式下,将Spread设置为180。

                此时我们会注意到,两个扬声器的声音变得均衡了。Spread为180时, 去掉了扬声器和audio source之间的位置关系,只会根据角色位置信息产生音量的变化。

        4. 调整Spread值,直到我们找到一个听起来没问题的值,记住这个值。

                当发生转向时,从左到右的声音转换应该是和谐的,但会有点细微差异。我们以现实生活中的感知为例。当我们一只耳朵更靠近音源时,肯定是更靠近音源的耳朵声音更明显,但另一只耳朵也并不是说就完全听不到或者声音变得非常小了。

        5. 退出Play模式,将第4步记录的值设置到Spread属性中。

                Spread值一般设置到0-180之间,我们就能找到一个比较合适的值。但Spread值最大能到360。180-360之间的值实际作用和0-180是一样的,但超过180后,声音的通道会反转。在某些情况下这种特性可能会起到特殊作用,但本场景中只要0-180之间的一个值即可。

探索对数滚降(Logarithmic Rolloff)

        目前声音在左右扬声器之间的转换已经比较平滑了,但我们仍然会注意到一个问题。即便我们已经在Max Distance距离之外,瀑布的声音仍然是可以听到的。Max Distance就好像是代表了声音的最小音量,这是怎么回事呢?

        造成这个问题的原因是音源的音量滚降( Audio Source’s Volume Rolloff)类型被设置为了对数滚降(Logarithmic Rolloff)。对数滚降的方式是真实世界总我们所感知声音的近似,由于我们对场景进行了一些修改,这种方式的效果可能不是那么明显。

        1. 为了更好地理解对数滚降是如何工作的,我们将Max Distance设置回500。

                修改后,我们应该能看到上图的曲线。图中红色线表示了音量随着Audio Listener距离的增加而减小。这条曲线一开始的一小段距离内降低地很快很陡,到后面会慢慢降低至0。这条红色线代表了Audio Source的音量衰减率曲线。

        2. 将Max Distance设置回10,观察一下曲线有什么变化。

        当Max Distance被设置到了一个较小的值时,对数滚降方式无法达到达到它想要的衰减曲线(想想对数函数的曲线应该不难理解)。它会尝试应用合适的曲线,但只能得到截短的曲线。我们可以看到最大距离10处,音量停在了0.3处。

        对数滚降方式中的Max Distance的理解,有一点很重要。这个距离并不是说声音听不到的距离,而是声音停止衰减的距离。声音在超出这个距离之外的一段距离内仍然会继续按照结束的衰减率进行处理,但随着距离增大,声音最终会听不到。

        3. 我们点击运行进入游戏,控制玩家慢慢远离瀑布,注意听在什么地方瀑布的声音无法再被听到。

        由于对数滚降方式的这些特性,它对于要从很远距离就能听到的声音的场景来说是不错的选择。但对于音源会在极短距离内快速衰减的情况来说,又该怎么办呢?

探索线性滚降(Linear Rolloff)

        1. 将Volume Rolloff选项从Logarithmic改成Linear,注意曲线的变化:

        我们可以从名字知道,线性滚降的曲线是一条直线,声音的音量会以线性的方式递减。最重要的是不像对数滚降,即便Max Distance较小,音量在最大距离处也会降低到0。

        2. 运行场景,感受一下线性滚降和对数滚降的区别。

        当角色在Max Distance范围外时,瀑布的声音完全听不到。但只要进入Max Distance范围内,声音会突然播放,声音就像是凭空出现而不是逐渐放大。当角色逐渐靠近音源时,声音会平滑增长,这样似乎还不错,但这并非是声音在真实世界中该有的现象。

        线性滚降方式最佳的使用方式是用于吸引玩家注意某些物体,而不是用于环境音源。音量线性增加会让玩家更容易判断音源和玩家的距离,可以让玩家知道他们的移动方向是否正确。举一个神秘海域的例子大家应该就明白了。《神秘海域 失落遗产》中,有一个道具是“女王的红宝石”,这个道具能够在接近宝藏的时候发出声响。玩家越接近宝藏,声音就越急促,玩家离开一定范围,声音就消失了(实际上顽皮狗是否是使用了线性滚降方式不得而知,但这个例子能比较好的理解线性滚降的场景)。

创建自定义的滚降曲线

        Unity也允许我们自定义滚降曲线。下面我们来看看这个功能。

        1. 将Volume Rolloff修改成Custom,观察一下曲线:

        2. 运行场景,体验一下效果。

            这条曲线相比于线性曲线,已经更加自然了。我们还可以进一步编辑曲线。

        3. 选择红色曲线。

        4. 选择1.0标记处的点,这会激活曲线的切线编辑:

        5. 左键点击并拖动切线,改变一下曲线的形状。

         我们可能会需要在曲线上编辑更多的点,在曲线上点击右键选择Add Key可以新增一个编辑点。

        接下来尝试去改改新增点的切线。新增的点有左右两条切线可以编辑。默认情况下它们会一起移动,我们可以在右键菜单中选择Broken来单独编辑左右两条切线。

        6. 尝试为瀑布编辑出一条最佳效果的曲线。然后运行场景,如果不满意再次尝试去编辑一下。

调整Audio Listener

        我们还可能注意到了一个问题,当角色进入到音源的范围内时,声音会延迟一段距离后才播放。这是因为目前场景中的Audio Listener是挂在相机上的,相机和角色是存在一定距离的。

        有一条比较好的通用原则是将Audio Listener挂在用户要和虚拟世界进行交互的物体身上。比如对于第一人称视角,将Audio Listener挂在Main Camera上是讲得通的:这种情况下相机就是用户的“眼睛”,眼睛和耳朵放到一起是合理的。本小节所使用的是一个third person controller,意味着用户是通过角色来和虚拟世界进行交互的。因此Audio Listener应该挂到角色身上。这就是说音效会基于角色位置来改变,这样会更符合预期。

        1. 在Hierarchy中选择Main Camera,在Inspector中找到Audio Listener。

        2. 点击Audio Listener组件右上角的三个圆点,选择Remove Componet移除该组件(也可以通过将左上角的勾去掉禁用这个组件)。

        3. 在Hierarchy中选择PlayerArmature游戏物体,在Inspetor中为其添加Audio Listener组件。

        4. 运行场景再体验一下有何不同。

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

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

相关文章

HEVC学习之去方块滤波

一、概要 视频编码为视频带来的压缩伪影呈现出的效果各有不同,但其原因总结起来为高频信息的失真以及基于块的编码消除了块与块之间的相似性。 为了弥补基于块的编码带来的影响,HEVC中引入了去方块滤波。 AVC中采取对44块的边界进行去方块滤波&#xf…

通过自定义域名 + SSL 的方式访问 Amazon MQ for RabbitMQ

引言: 一般为了解决应用解耦,异步处理,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性的架构;我们会引入消息队列中间件来完善架构设计。 对于需要消息传递协议的应用程序,…

CCFCSP 201409-2 画图

思路上很容易想到即使用一个标记数组对上过色的模块进行标记&#xff0c;最后遍历该数组得到被标记的模块数即可 #include<iostream>using namespace std;int mapp[105][105]; int ans0;int main(){int n;cin>>n;for(int i0;i<n;i){int x1,y1,x2,y2;cin>>…

【P15】JMeter 正则表达式提取器(Regular Expression Extractor)

文章目录 一、准备工作二、测试计划设计 一、准备工作 慕慕生鲜&#xff1a; http://111.231.103.117/#/login 进入网页后&#xff0c;登录&#xff0c;页面提供了账户和密码 搜索框输入“虾” 右键检查或按F12&#xff0c;打开调试工具&#xff0c;点击搜索 二、测试计划设…

【Java项目】SpringCloud项目注册到Nacos中心时显示的是内网IP导致不同服务器之间无法互相调用接口的解决并发

微服务项目地址—动动你发财的小手点一个stars吧 出现这个问题是之前我也就遇到过的&#xff0c;这个问题的情况就是&#xff1a; 我们知道微服务项目是可以把不同的项目部署在不同的服务器上从而减少某一台服务器的压力&#xff0c;我们只需要为每一个服务配置一个注册中心即…

计算机基础--计算机存储单位

一、介绍 计算机中表示文件大小、数据载体的存储容量或进程的数据消耗的信息单位。在计算机内部&#xff0c;信息都是釆用二进制的形式进行存储、运算、处理和传输的。信息存储单位有位、字节和字等几种。各种存储设备存储容量单位有KB、MB、GB和TB等几种。 二、基本存储单元…

【进阶知识】显示管理器,窗口管理器,桌面环境/桌面管理器,显示服务器

文章目录 一、显示管理器&#xff08;Display Manager&#xff09;1.1 什么是 Linux 中的显示管理器&#xff1f;1.2 不同的显示管理器1.3 其他控制台显示管理器图形界面显示管理器 二、窗口管理器&#xff08;Window Manager&#xff09;三、桌面环境/桌面管理器&#xff08;D…

AD9680之JESD204B接口2路、4路、8路的14bit 500MSPS/1GSPS/1.25GSPS采样率子卡的中文版本设计及调试经验资料分享

板卡概述&#xff1a; 【FMC155】 FMC155 是一款基于 VITA57.1 标准的&#xff0c;实现 2 路 14-bit、500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。 该模块遵循 VITA57.1 规范&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板 卡 ADC 器件采用 ADI 的…

MySQL基础篇补充 | 单行函数(数值函数、字符串函数、日期函数、流程控制函数、加密与解密函数、MySQL信息函数)

目录 一&#xff1a;单行函数 1. 数值函数 &#xff08;1&#xff09;基本函数 &#xff08;2&#xff09;角度与弧度互换函数 &#xff08;3&#xff09;三角函数 &#xff08;4&#xff09;指数与对数 &#xff08;5&#xff09;进制间的转换 2. 字符串函数 3. 日期和…

Nginx配置浏览器缓存,页面展示更快一步

1.简介 缓存能够存储请求的响应结果&#xff0c;可以很方便的再次访问&#xff0c;使用缓存的优点是很明显的。 加速内容的访问&#xff0c;降低响应时间减少服务器的负载 Nginx不仅仅是一个web服务器&#xff0c;它也是一个web缓存服务器。通过Nginx缓存&#xff0c;我们对…

Java引用类型(强引用,软引用,弱引用,虚引用)

从Java SE2开始&#xff0c;就提供了四种类型的引用&#xff1a;强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的&#xff1a;第一是可以让程序员通过代码的方式决定某些对象的生命周期&#xff1b;第二是有利于JVM进行垃圾回收。 强引用&#xff08…

【Linux环境】Linux常用命令记录汇总

Linux常用命令记录汇总 一、传输命令二、打包命令三、创建文件夹或文件命令四、切换用户五、vim相关命令六、权限更改命令 一、传输命令 命令格式&#xff1a; rz 点击回车 sz 文件名 点击回车命令解释&#xff1a; rz&#xff08;receive Zmodem缩写&#xff09;上传文件&am…

淘宝时光机入口在哪里怎么打开回溯20年淘宝历史账单?

淘宝时光机入口在哪里怎么打开&#xff1f; 打开淘宝时光机入口&#xff1a;https://www.caochai.com/article-4208.html &#xff0c;开始回溯20年淘宝历史账单&#xff1b; 淘宝大额内部隐藏优惠券怎么领取&#xff1f; 1、打开淘宝优惠券查询领取入口&#xff1a;https://…

上班摸鱼逛博客,逮到一个字节8年测试开发,聊过之后羞愧难当......

老话说的好&#xff0c;这人呐&#xff0c;一旦在某个领域鲜有敌手了&#xff0c;就会闲得某疼。前几天我在上班摸鱼刷博客的时候认识了一位字节测试开发大佬&#xff0c;在字节工作了8年&#xff0c;因为本人天赋比较高&#xff0c;平时工作也兢兢业业&#xff0c;现在企业内有…

好家伙,一天约了6场面试,又被吊打了....

好兄弟一天约了6场面试&#xff0c;又被吊打了 面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是一天只吃一顿饭&#xff0c;一直奔波在路上 不扯这个了&#xff0c;给大家说说面试吧&#xff0c;我工作大概两年多的时间&#xff0c;大家可以参考下 在整个面试…

mysql 连表查询

文章目录 一、内连接二、外连接2.1 左外连接2.2 右外连接 三、总结 写在前面 在MySQL中join操作被称为连接&#xff0c;作用是能连接多个表的数据&#xff08;通过连接条件&#xff09;&#xff0c;从多个表中获取数据合并在一起作为结果集返回给客户端。即使用连接查询一条SQL…

Redis 主从 + 哨兵模式搭建

前言&#xff1a;以Linux环境为示例 一、整体架构&#xff08;1主 2从 3哨兵&#xff09; 二、redis 安装 1、安装路径&#xff1a;/usr/local/redis/redis-6382&#xff08;可自行指定&#xff09; 2、解压安装包&#xff1a; 直接解压&#xff1a;tar -axvf redis-5.0.…

国内可以使用的chatgpt站点,有多种工具可用

看到很多人在寻找国内可以使用的chatgpt站点&#xff0c;忍不住来给大家分享一波&#xff0c;这个相对而言还是挺好用的&#xff0c;不限制字数&#xff0c;每天都能白女票使用。看下面正文。 chatgpt的使用方法 在浏览器或者打开我的电脑&#xff0c;顶部车俞入 人工智能聊…

C++好难(5):内存管理

这一节学完&#xff0c;我们 C嘎嘎 就算是正式入门了&#xff0c;但是之后的课还会更上一阶d(ŐдŐ๑) 继续坚持&#xff01; 【本节目标】 1. C/C内存分布 2. C语言中动态内存管理方式 3. C中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原…

【在线OJ项目】项目环境与项目演示

目录 一、项目环境 二、项目展示 项目Gitee地址&#xff1a;online-oj: 在线OJ项目实现了核心模块&#xff0c;后续添加竞赛、考试等 (gitee.com)https://gitee.com/PG1886/online-oj 一、项目环境 采用SpringBootSpringMVCMybatis进行服务器开发 前端采用HTMLCSSJS&#…