注:本系列进阶教程仅针对引擎编辑器:v1.2.2及以下版本 
 
   
 
 音频处理 
 
 素材资源    工程文件 
 
 声音是游戏中非常重要的组成部分,Genesis-3D提供了多样的声音特效处理方式,方便用户制作丰富多彩的声音效果。本例从基本音频属性、混音过滤器、音频监听器等方面展示音频处理效果;实现播放3D声音,场景内主角行走触发切换混音过滤器,用户输入空格切换音频监听器等功能。 
 
 混音过滤器:对3D声音数据进行特殊处理以模拟现实世界中环境音效的处理器,类似于现实世界中的调音台; 
 
 音频监听器:虚拟的三维场景中用来收听声音的接收器,类似于现实世界中人的耳朵。 
 
 1. 实现键盘输入控制人物行走。 
 
 
 
 2. 创建声音。 
 
 
 
 3. 为声音添加音源。 
 
 
 
 4. 设置音源基本属性。 
 
 
 
 音量:取值区间[0, 1],0静音,1最大 
 
 声音类型:选择2D类型时,监听器收听的声音从始至终保持一致;当选择3D类型时,监听器接收到的声音大小会根据其与音源之间的距离来判定,所以衰减方式、最小距离、最大距离属性只适用于3D类型。 
 
 衰减方式:线性:按照线性函数衰减,衰减较慢;倒数:按照倒数函数曲线衰减,衰减速度居中; 平方线性:按照平方倒数函数曲线衰减,衰减最快; 
 
 最小距离:在最小距离内音量保持初始值,不衰减 
 
 最大距离:超出最大距离后,音量一直保持最大距离时的数值,不再衰减 
 
 最大距离:超出最大距离后,音量一直保持最大距离时的数值,不再衰减 
 
 5. 添加音频监听器,默认情况下只需要在摄像机上添加一个音频监听器,本例中又在远处添加一个音频监听器,用于演示音频监听器的切换效果。 
 
 
 
 
 
 6. 编写脚本,实现根据场景内主角X坐标切换引擎内置混音过滤器,用户输入空格切换音频监听器等功能。 
 
 
  
   
   |  01  |  
       public class Sound : ScriptableClass  |  
     
  
   
   
   |  03  |  
               private const int CHANGE_DISTANCE = 50;  |  
     
  
   
   
   |  05  |  
               public override void OnLoad()  |  
     
  
   
   
   
   |  08  |  
                   Owner.GetComponent< SoundSource>().Play();  |  
     
  
   
   
   
   |  11  |  
                   Owner.AddComponent< SoundReverbFilterComponent>();  |  
     
  
   
   
   
   |  14  |  
                   Owner.GetComponent< SoundReverbFilterComponent>().Attach();  |  
     
  
   
   
   
   |  17  |  
               public override void OnFrame()  |  
     
  
   
   
   |  19  |  
                   //根据场景内主角X坐标切换引擎内置混音过滤器  |  
     
  
   
   |  20  |  
                   float fPlayerPostionX = Player.Instance.PlayerPostion.X;  |  
     
  
   
   |  21  |  
                   if (CHANGE_DISTANCE > fPlayerPostionX)  |  
     
  
   
   
   |  23  |  
                       Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.OFF;  |  
     
  
   
   
   |  25  |  
                   else if ((2 * CHANGE_DISTANCE) > fPlayerPostionX)  |  
     
  
   
   
   |  27  |  
                       Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.BATHROOM;  |  
     
  
   
   
   |  29  |  
                   else if ((3 * CHANGE_DISTANCE) > fPlayerPostionX)  |  
     
  
   
   
   |  31  |  
                       Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.STONECORRIDOR;  |  
     
  
   
   
   |  33  |  
                   else if ((4 * CHANGE_DISTANCE) > fPlayerPostionX)  |  
     
  
   
   
   |  35  |  
                       Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.FOREST;  |  
     
  
   
   
   |  37  |  
                   else if ((5 * CHANGE_DISTANCE) > fPlayerPostionX)  |  
     
  
   
   
   |  39  |  
                       Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.PARKINGLOT;  |  
     
  
   
   
   
   
   |  43  |  
                       Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.UNDERWATER;  |  
     
  
   
   
   
   
   |  47  |  
                   if (Input.KeyDown(Code.Space))  |  
     
  
   
   
   |  49  |  
                       Actor childActor = Owner.GetChild(0);  |  
     
  
   
   |  50  |  
                       if (!childActor.IsActive)  |  
     
  
   
   
   
   
   
   
   |  56  |  
                           childActor.Deactive();  |  
     
  
   
   
   
   
   
  
 7. 将脚本挂载到声音。 
 
 
 
 8. 运行工程,体验效果。 
 
 
 
 
   
 
 引擎官方网站:http://www.genesis-3d.com.cn/ 
 
 官方论坛:http://bbs.9tech.cn/genesis-3d/ 
 
 官方千人大群:59113309   135439306 
 
 YY频道-游戏开发大讲堂(完全免费,定期开课):51735288  
 
 Genesis-3D开源游戏引擎:游戏起源,皆因有我!!! 
 
 
 
 
 
来源:oschina
链接:https://my.oschina.net/u/1432254/blog/195722