《Genesis-3D遊戲引擎系列教程-高級篇》1:後期效果

注:本系列進階教程僅針對引擎編輯器:v1.2.2及如下版本

音頻處理

素材資源    工程文件 編輯器

聲音是遊戲中很是重要的組成部分,Genesis-3D提供了多樣的聲音特效處理方式,方便用戶製做豐富多彩的聲音效果。本例從基本音頻屬性、混音過濾器、音頻監聽器等方面展現音頻處理效果;實現播放3D聲音,場景內主角行走觸發切換混音過濾器,用戶輸入空格切換音頻監聽器等功能。 ide

混音過濾器:對3D聲音數據進行特殊處理以模擬現實世界中環境音效的處理器,相似於現實世界中的調音臺; 函數

音頻監聽器:虛擬的三維場景中用來收聽聲音的接收器,相似於現實世界中人的耳朵。 網站

1. 實現鍵盤輸入控制人物行走。 spa

2. 建立聲音。 3d

3. 爲聲音添加音源。 教程

4. 設置音源基本屬性。 遊戲

音量:取值區間[0, 1],0靜音,1最大 ip

聲音類型:選擇2D類型時,監聽器收聽的聲音從始至終保持一致;當選擇3D類型時,監聽器接收到的聲音大小會根據其與音源之間的距離來斷定,因此衰減方式、最小距離、最大距離屬性只適用於3D類型。 資源

衰減方式:線性:按照線性函數衰減,衰減較慢;倒數:按照倒數函數曲線衰減,衰減速度居中; 平方線性:按照平方倒數函數曲線衰減,衰減最快;

最小距離:在最小距離內音量保持初始值,不衰減

最大距離:超出最大距離後,音量一直保持最大距離時的數值,再也不衰減

最大距離:超出最大距離後,音量一直保持最大距離時的數值,再也不衰減

5. 添加音頻監聽器,默認狀況下只須要在攝像機上添加一個音頻監聽器,本例中又在遠處添加一個音頻監聽器,用於演示音頻監聽器的切換效果。

6. 編寫腳本,實現根據場景內主角X座標切換引擎內置混音過濾器,用戶輸入空格切換音頻監聽器等功能。

01 public class Sound : ScriptableClass
02     {
03         private const int CHANGE_DISTANCE = 50;
04  
05         public override void OnLoad()
06         {
07             //播放音頻
08             Owner.GetComponent< SoundSource>().Play();
09  
10             //添加音頻混音過濾器組件
11             Owner.AddComponent< SoundReverbFilterComponent>();
12  
13             //激活混音過濾器
14             Owner.GetComponent< SoundReverbFilterComponent>().Attach();
15         }
16  
17         public override void OnFrame()
18         {
19             //根據場景內主角X座標切換引擎內置混音過濾器
20             float fPlayerPostionX = Player.Instance.PlayerPostion.X;
21             if (CHANGE_DISTANCE > fPlayerPostionX)
22             {
23                 Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.OFF;
24             }
25             else if ((2 * CHANGE_DISTANCE) > fPlayerPostionX)
26             {
27                 Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.BATHROOM;
28             }
29             else if ((3 * CHANGE_DISTANCE) > fPlayerPostionX)
30             {
31                 Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.STONECORRIDOR;
32             }
33             else if ((4 * CHANGE_DISTANCE) > fPlayerPostionX)
34             {
35                 Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.FOREST;
36             }
37             else if ((5 * CHANGE_DISTANCE) > fPlayerPostionX)
38             {
39                 Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.PARKINGLOT;
40             }
41             else
42             {
43                 Owner.GetComponent< SoundReverbFilterComponent>().ReverbMode = SoundReverbFilterComponent.SoundReverbMode.UNDERWATER;
44             }
45  
46             //切換音頻監聽器
47             if (Input.KeyDown(Code.Space))
48             {
49                 Actor childActor = Owner.GetChild(0);
50                 if (!childActor.IsActive)
51                 {
52                     childActor.Active();
53                 }
54                 else
55                 {
56                     childActor.Deactive();
57                 }
58             }
59         }
60     }

7. 將腳本掛載到聲音。

8. 運行工程,體驗效果。



引擎官方網站:http://www.genesis-3d.com.cn/

官方論壇:http://bbs.9tech.cn/genesis-3d/

官方千人大羣:59113309   135439306

YY頻道-遊戲開發大講堂(徹底免費,按期開課):51735288 

Genesis-3D開源遊戲引擎:遊戲起源,皆因有我!!!

相關文章
相關標籤/搜索