注:本系列進階教程僅針對引擎編輯器: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 |
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開源遊戲引擎:遊戲起源,皆因有我!!!