Wwise – States 的基本使用方式和實作

blank

在聲音播出之前都要確定Bank已經加載在正確的場景才可以哦!

前言

小月從懸崖上做出了信仰之躍,不到幾秒的時間,一個快速的身影從高處迅速落入水裡。耳邊的風聲從狂裂的呼嘯聲瞬間變成朦朧的低頻水壓。

從這段表演裏面,State可以幫助聲音設計師做出什麽效果呢?

State是什麽?

State是Wwise的一種Parameter,可以在Project Explore裡面的GamSyncs標籤頁找到。State是一種用於切換“狀態”的組件,將一個正在播放中的聲音(音軌)切換成設計好的音效模式。

在States的資料夾下有一個預設的Work Unit,我們可以在裡面選擇新增一個State Groups(必要),之後我們才可以在理面新增我們需要的State參數。

blank

遊戲劇情和玩法通常不是一條直綫(當然也有很多是一條直綫),我們在遊戲總會遇到各種奇奇怪怪的狀況,並且顯示亂七八糟的狀態和UI在畫面上,好讓玩家瞭解現在到底發生了什麽事。那如果畫面上已經佈滿了各式各樣顔色的按鈕和狀態欄,玩家要怎麽透過聲音來瞭解現在主角的狀態呢?

State的使用時機

State在遊戲中的用法有哪些呢?通常我們會需要在遊戲中設定很多參數,透過事件彼此的連動來達到要運作的效果,而一旦使用過多的指令,就容易讓技術和企劃對專案內的聲音掌握度相對降低許多,而State可以作用於Bus和Sound的情況下,讓更改聲音的屬性不再需要用RTPC或Action來控制(當然也可以透過Action來SetState!),這會大大的幫助我們在開發過程中釐清每個聲音之間變化的脈絡。

快速切換預設

State就像Snapshot(快照)一樣,可以將一個聲音或一個Bus分成不同的狀態屬性,透過切換狀態來達到預先設定好的播放模式。

企劃

我希望可以在主角死亡的時候,周遭的環境音和音樂都降低個6分貝。

技術

好喲,音效哥有做降低6分貝的Action Event嗎?

音效設計師

我用State就可以了!

更改播放音樂的模式

State也可以當作Music切換時的工具,例如我們有兩個場景音樂,分別需要在室內或室外播放,那我們就可以新增兩個State:Outdoor / Indoor,然後透過SetState來決定要播放哪一個音樂,甚至切換播放的音樂後,再套用State上面設定好的屬性。

企劃

音效哥,我想要在室內播放Party狂歡的音樂,並且要有房間混響,室外的時候切換成古典樂,關閉混響並且音量減到一般,這要求很過分嗎?

音效設計師

是有一點,但SetState一樣可以搞定!

在Wwise裡新增State

想要在遊戲引擎裡面使用State,我們必須現在wwise的GameSync底下新增這個組件。

新建State Group

我們可以States資料夾下新增Default Work Unit,或是直接在下方新增StateGroup,新增好Group之後才可以將我們要用到的State放入裡面。

blank

添加State到容器或音軌

在Project Explorer下方,我們可以把State組件加入到我們想要變更的聲音素材或是Bus上,在標籤頁找到States,選擇AddStateGroup講剛才做好的Group加入。

blank

編輯State屬性

新增State之後,我們可以在裡面設定我們要的數值。相同的StateGroup可以添加到不同的Sound或是Bus,也就是說兩個不同的Sound套用了同一個StateGroup卻可以做出不同的聲音效果。

blank

聆聽效果

做好個別的設定之後,我們可以回去播放Sound文件,並且在Transport Control裡面找到State標籤,在聲音播放的時候選擇我們其中一個狀態,並且聆聽效果的變化。(參考影片範例1)

blank

為Music裡新增State

想要在遊戲引擎裡面使用State,我們必須現在wwise的GameSync底下新增這個組件。

新建State Group

和上面的State做法一樣,我們在Work Unit裡面新增一個適合音樂使用的State Group。

blank

添加State組件到Music音軌並編輯屬性

在屬性頁面我們可以對兩個音樂分別設置不同的音量,效果和通道上的效果器數值。

blank

添加State組件到Container

設定好數值後,按下F10切換到交互音樂設計界面,在GameSyncs下面找到我們做好的StateGroup,將其拖到Music Swtich Container Association Editor下方。

blank

對State新增路徑

我們可以在Music Type裡面看到我們想要切換的三種狀態:Indoor ,Outdoor,None(系統自動添加),點擊Add Path準備建立與聲音的關係。

blank

添加路徑到物件

在Project Explorer找到我們想要切換的音樂,分別將其用拖拉的方式或是點擊紅框處添加到Object欄位下方。(參考影片範例2)

blank

呼叫State!

具體在流程內呼叫State的方式有很多種,在這邊我們簡單介紹其中兩種。在Unity裡面,我們可以透過以下方式來調用State組件。

  • 直接從WwisePicker裡面拖拉State到Inspector視窗
  • AksoundEngine.setState(Unit StateGroup, Uint State);
public void SetState_A_ByName()
    {   
        AkSoundEngine.SetState("FX_Group","High_Enhanced");
    }

使用字串來設定State,如果企劃習慣使用表單控管聲音素材,可以採用這個方式。

public AK.Wwise.State state;

public void SetState_B_ByID()
    {   
        var GroupID = state.GroupId;
        var StateID = state.Id;
        print("GroupID = " + GroupID +" / " +"StateID = " + StateID);
        AkSoundEngine.SetState(GroupID,StateID);
    }

使用integer ID來設定State,如果技術有public Ak.wwise.state到Inspector視窗讓企劃使用,則可以採用這個方式。

範例演示

讓我們看一下實際在Unity內使用State的效果,在影片內製作State High & Low兩種方式來切換不同的音樂狀態,一般會多設定一個None的模式讓State回到原本預設的數值。

[Demo 1] 切換當前播放的音樂狀態

Music From SONUSCORE – Champions Of Darkness (Full) (Tilman Sillescu)

[Demo 2] 切換不同音樂+切換狀態

Music From Chainsmoker – Closer / All We Know

總結

回到一開始的引言,原來用State處理從高處瞬間落入水面的聲音效果是這麼簡單!只要在原本和想要切換的狀態之間,設定不同的LPF參數和需要衰減的音量就可以輕鬆完成。

那可能有人會想:State做的事情和RTPC有不一樣嗎?仔細想想,還真的有點不太一樣。RTPC更接近的說:是調整一個連續的數值,表現的是一個線性的變化(當然也可以做成階段性),控制的參數和屬性也有些微的不同,以及一條RTPC 一次只能變更一個Parameter。而State更傾向於整合這些單一的項目,可以批量更改Event或是Bus的聲音屬性,並可以簡單透過調用SetState就完成聲音功能的切換。所以對於大方向上概略的調整建議使用State組件,而要完成細節上的表現還是推薦使用RTPC。