如何在Unity中添加三维空间声音Spatial Sounds
2017-02-22 15:34
309 查看
hololens的声音模块是头戴环上,靠近耳朵上方的一个红色的模块,三维空间声音感效果还不错,本文主要讲述如何在项目中使用空间声音特性。我们主要讲述必须的插件组件和unity声音组件和属性的设置来确保空间声音的实现。
我们需要在Unity中使用声音插件来实现空间声音。这个插件(audio spatalizer plugin)被打包到了Unity,所以只需要在设置菜单中 Edit > Audio > Spatializer 启用Microsoft HRTF拓展就好。因为微软空间声音组件目前取样频率只支持到48000,所以你应该把System Sample Rate属性设为48000来避免在系统输出设备没有设置它为48000的罕见情况下发生HRTF组件错误。
注意:当在系统版本低于Windows 10的设备上使用Windows 10 SDK编译HoloLens应用时,空间声音将不会再编辑器和设备上工作。
通过调整Audio Source组件的3个属性即可在Unity中使用空间声音。步骤如下:
在项目面板中,选中一个附有Audio Source组件的对象
在检视面板中,修改Audio Source组件属性:
选中Spatialize属性
设置Spatial Blend模式为3D
展开3D Sound Settings,并将Volume Rolloff值为 Custom Rolloff
现在就能够在项目中存在很真实的声音。
强烈推荐开发者要熟悉下空间声音设计指南(Spatial Sound design guidelines),它会帮准你快速的集成空间声音到项目中,同时能尽可能的提高空间声音的体验。
微软提供了一些额外的参数设置用来额外控制声音模拟。这些参数分别是最大最小增益、单位增益距离和模拟空间大小。
任意距离上的最小增益,范围(-96,+12),默认值是-96分贝。
任意距离上的最大增益,范围(-96,+12),默认值是+12分贝。
增益是0分贝的距离,单位为米,范围(0.05,无穷大),默认值是1米。
空间声音模拟的空间大小。大致的空间大小划分为:small(从办公室到小型会议室),medium(大会议室),lARge(礼堂)。你可以将空间大小属性设为none来模拟户外空间。默认空间大小是small。
HoloToolkit项目提供了一个静态类来实现简单的空间声音设定。这个类在HoloToolkit\SpatialSound目录下,能被项目任何脚本调用。我们推荐你给每个Audio Source都设定一遍。下面代码演示了设置Audio Source空间大小:
如果你不想使用HoloToolkit提供的工具,以下则是直接修改HRTF参数的方法。你可以把以下代码复制/粘贴进SetHRTF.cs脚本中,并将此脚本附加到任何Audio Source对象上。这允许你修改HRTF插件的重要参数。
source
print?
本文转自:52VR.com Hololens http://www.52vr.com/article-792-1.html
Enabling Spatial Sound in Unity 在Unity中启用空间声音
注意:当在系统版本低于Windows 10的设备上使用Windows 10 SDK编译HoloLens应用时,空间声音将不会再编辑器和设备上工作。
Using Spatial Sounds in Unity 在Unity中使用空间声音
在项目面板中,选中一个附有Audio Source组件的对象
在检视面板中,修改Audio Source组件属性:
选中Spatialize属性
设置Spatial Blend模式为3D
展开3D Sound Settings,并将Volume Rolloff值为 Custom Rolloff
现在就能够在项目中存在很真实的声音。
强烈推荐开发者要熟悉下空间声音设计指南(Spatial Sound design guidelines),它会帮准你快速的集成空间声音到项目中,同时能尽可能的提高空间声音的体验。
Setting Spatial Sound Settings 设置空间声音
Minimum Gain 最小增益
任意距离上的最小增益,范围(-96,+12),默认值是-96分贝。
Maximum Gain 最大增益
任意距离上的最大增益,范围(-96,+12),默认值是+12分贝。
Unity Gain Distance 单位增益距离
增益是0分贝的距离,单位为米,范围(0.05,无穷大),默认值是1米。
Room Size 空间大小
空间声音模拟的空间大小。大致的空间大小划分为:small(从办公室到小型会议室),medium(大会议室),lARge(礼堂)。你可以将空间大小属性设为none来模拟户外空间。默认空间大小是small。
示例:
HoloToolkit项目提供了一个静态类来实现简单的空间声音设定。这个类在HoloToolkit\SpatialSound目录下,能被项目任何脚本调用。我们推荐你给每个Audio Source都设定一遍。下面代码演示了设置Audio Source空间大小:[代码]:
1 | AudioSource audioSource = gameObject.GetComponent<audiosource>() |
2 |
3 | if (audioSource != null ) { |
4 | SpatialSoundSettings.SetRoomSize(audioSource, SpatialMappingRoomSizes.Medium); |
5 | }</audiosource> |
Directly Acessing Parameters from Unity 直接从Unity访问以上参数
如果你不想使用HoloToolkit提供的工具,以下则是直接修改HRTF参数的方法。你可以把以下代码复制/粘贴进SetHRTF.cs脚本中,并将此脚本附加到任何Audio Source对象上。这允许你修改HRTF插件的重要参数。[代码]:
viewsource
print?
01 | using UnityEngine; |
02 | using System.Collections; |
03 | public class SetHRTF |
04 | public enum ROOMSIZE { Small, Medium, Large, None }; |
05 | public ROOMSIZE room = ROOMSIZE.Small; // Small is regarded as the "most average" |
06 | // defaults and docs from MSDN |
07 | // https://msdn.microsoft.com/en-us/library/windows/desktop/mt186602(v=vs.85).aspx[/code] |
08 | public float mingain = -96f; // The minimum gain limit applied at any distance, from -96 to + 12 |
09 | public float maxgain = 12f; // The maximum gain applied at any distance, from -96 to + 12 |
10 | public float unityGainDistance = 1; // The distance at which the gain applied is 0dB, from 0.05 to infinity |
11 | public float bypassCurves = 1; // if > 0, will bypass Unity's volume attenuation and make a more accurate volume simulation automatically in the plugin |
12 | AudioSource audiosource; |
13 | void Awake() |
14 | { |
15 | audiosource = this .gameObject.GetComponent<audiosource>(); |
16 | if (audiosource == null ) |
17 | { |
18 | print( "SetHRTFParams needs an audio source to do anything." ); |
19 | return ; |
20 | } |
21 | audiosource.spatialize = 1; // we DO want spatialized audio |
22 | audiosource.spread = 0; // we dont want to reduce our angle of hearing |
23 | audiosource.spatialBlend // we do want to hear spatialized audio |
24 | audiosource.SetSpatializerFloat(1, ( float )room); // 1 is the roomsize param |
25 | audiosource.SetSpatializerFloat(2, mingain); // 2 is the mingain param |
26 | audiosource.SetSpatializerFloat(3, maxgain); // 3 is the maxgain param |
27 | audiosource.SetSpatializerFloat(4, unityGainDistance); // 4 is the unitygain param |
28 | audiosource.SetSpatializerFloat(5, // 5 is bypassCurves, which is usually a good idea |
29 | } |
30 | }</audiosource> |
相关文章推荐
- 如何在 notification 上添加声音
- 给自己的Unity添加声音文件
- 如何在Unity编辑器中添加你自己的工具
- Unity中物体添加刚体属性后,运行出现掉落情况如何解决?
- unity开发之八:如何在UGUI其他的组件上添加点击事件(解答)
- 如何在VC++程序中添加播放声音模块——PlaySound函数的使用
- unity中gameobject如何添加线框网格
- 自定义推送声音需要如何添加到APP才会响?
- unity非button如何添加单击事件
- unity在定制的shader里面如何添加阴影
- Unity之NGUI进度条,打印机,添加声音
- [译]如何在Unity编辑器中添加你自己的工具
- UNITY中如何在AR项目中动态的给ImageTag添加对象
- 如何在unity游戏运行过程中给GameObject添加一个组件
- 9.给自己的Unity添加声音文件
- Unity插件之NGUI学习(6)—— 关于Widget如何添加触发事件(触发OnClick)
- 关于unity动态添加游戏对象问题,如何动态添加一个菜单【二】
- Hololens开发手记——Unity之Spatial Sounds空间声音
- 【Unity】9.2 如何添加粒子组件
- Android如何为按键添加声音