五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

在 Wwise 和 Unity 中構(gòu)建對白 | 敘事音頻

2021-12-09 11:17 作者:Wwise官方  | 我要投稿

帶配音的對白是現(xiàn)代電子游戲的重要組成部分,藉此玩家不僅可以將角色與特定聲音聯(lián)系起來,而且還可通過整體聲調(diào)更好地了解角色的感受。隨著復(fù)雜對白系統(tǒng)的出現(xiàn),這一點(diǎn)得到了進(jìn)一步加強(qiáng)。此類系統(tǒng)可根據(jù)玩家言行改變角色說話的內(nèi)容或方式。

如果玩家之前幫助過某個(gè)角色,其可能會(huì)表現(xiàn)得比較友好;倘若玩家做過違背其原則的事,便可能會(huì)表現(xiàn)得更為敵對。這就是所謂的“動(dòng)態(tài)對白”。

在此,我們將著重介紹如何構(gòu)建以敘事為中心的對白并使用 Wwise 和 Unity 加以實(shí)現(xiàn)。Wwise 專門設(shè)有將動(dòng)態(tài)對白整合到電子游戲中的功能,不過在此我們會(huì)使用其他 Wwise 系統(tǒng)來驅(qū)動(dòng)對白系統(tǒng)。在本文中,我們主要探討以下 3 個(gè)方面:

1. 通過 Sequence Container 實(shí)現(xiàn)的基本敘事,其不會(huì)隨玩家所做決定變化。

2. Wwise 內(nèi)嵌的本地化系統(tǒng),方便開發(fā)人員制作多語言游戲。

3. 通過 Switch Container 實(shí)現(xiàn)的動(dòng)態(tài)敘事,其會(huì)隨著受玩家影響的變量變化。

在此,各位既可了解 Wwise 的 Sequence Container 和 Switch Container,還能學(xué)到更多與 Wwise 相關(guān)的 Unity C# 腳本編寫知識(shí)(如 Event 發(fā)送、Event 回調(diào)、Switch/State 變化)。

Wwise – 通過 Sequence Container 實(shí)現(xiàn)的基本敘事及本地化系統(tǒng)

在此,我們要設(shè)計(jì)一段“指揮官向玩家下達(dá)命令”的配音。該命令將被分成 5 段不同的配音,我們會(huì)通過編程來讓其逐段播放。

1. “Hello? Hello? Can you hear me?”

2. “Oh good. Listen, I need you to do something very, very important for me.”

3. “In front of you are these little... obstacles that I need you to overcome.”

4. “I just need you to jump over the hurdle, go under the archway, and to the green path. Not the red one. That would be bad.”

5. “If you could do that for me, that would greatly help us over here in corporate. Over and out.”

這段敘事在游戲開始的時(shí)候固定播放,無論順序還是內(nèi)容都不會(huì)有任何改動(dòng)。為此,我們可以使用 Sequence Container 來按照原樣逐段播放每條音軌。除此之外,我們還將探究 Wwise 的本地化系統(tǒng),看看如何根據(jù)玩家的偏好來播放 English 或 Spanish 語言的音頻。

首先,我們要轉(zhuǎn)到 Audio 選項(xiàng)卡。接著,在 Actor-Mixer Hierarchy 下創(chuàng)建新的 Sequence Container (Ctrl + Shift + Alt + Q),并將其命名為 MissionBriefing。然后,在新建的 Sequence Container 下載入音頻文件。為此,可右鍵單擊 Sequence Container 并選擇 Import Audio Files... (Shift + I),或者直接將音頻文件從系統(tǒng)拖到 Sequence Container 中。

在 Audio File Importer 中,將 Import as: 字段由 Sound SFX 切換為 Sound Voice。然后,單擊 Import。

Sound Voice 跟 Sound SFX 差不多,只不過其允許針對 Wwise 工程中所用的各種語言將多個(gè)音頻文件導(dǎo)入其中。在更改語言設(shè)置后,所有 Sound Voice 都將換成對應(yīng)語言的音頻文件。

現(xiàn)在,我們導(dǎo)入了所有 English 音頻文件。接下來,我們要允許向 Wwise 工程添加其他語言。為此,可轉(zhuǎn)到頂欄中的 Project,然后選擇 Languages... 或按下 Shift + J。通過 Language Manager,我們可以添加、移除和重命名語言,甚至更改對應(yīng)語言的所有 Sound Voice 的 Make-Up Gain 屬性。首先,我們來單擊 Add... 按鈕,并在彈出的方框中鍵入 Spanish。接著,在隨后的警告提示窗口中,單擊 OK 確認(rèn)更改。

在此,無論選中哪個(gè)新建的 Sound Voice,Contents Editor 中都會(huì)顯示與 English 和 Spanish 對應(yīng)的分區(qū)?,F(xiàn)在,我們已經(jīng)設(shè)置好了 English 音頻文件。接下來,我們把 Spanish 音頻文件也導(dǎo)入進(jìn)來。為此,可將其逐個(gè)拖到 Contents Editor 的 Spanish 字段中。對于 5 段敘事音頻,要重復(fù)執(zhí)行此操作。

每次播放這些 Sound Voice,都會(huì)聽到默認(rèn)語言的聲音。若轉(zhuǎn)到 Wwise 的左上角,將默認(rèn)語言切換為 Spanish,然后再次播放,將聽到前面拖到 Spanish 字段中的聲音。由此可見,開發(fā)者只需隨便操作一下,便可從某一語言切換為另一語言。

現(xiàn)在,我們來看看之前創(chuàng)建的 Sequence Container。在選中該容器后,查看 Contents Editor 及右側(cè)的 Playlist 分區(qū)。在默認(rèn)情況下,Sequence Container 并不會(huì)播放其所含的全部聲音對象,而只會(huì)播放 Playlist 中的聲音對象。為此,需嚴(yán)格按照預(yù)期播放順序?qū)⒏鱾€(gè) Sound Voice 從 Contents Editor 拖到 Playlist 中。

除非要編輯聲音,目前這樣就可以。接下來,我們要轉(zhuǎn)到 Events 選項(xiàng)卡,并在 Default Work Unit 中新建 2 個(gè) Event:?

1. "Play_MissionBriefing" Event,帶有 Play 動(dòng)作,負(fù)責(zé)播放 Sequence Container。

2. "Reset_MissionBriefing" Event,帶有 Reset Playlist 動(dòng)作,負(fù)責(zé)將 Sequence Container 的播放列表重置到第一個(gè)聲音對象。

注意:在此設(shè)置動(dòng)態(tài)對白系統(tǒng)時(shí),我們并未使用 Events 選項(xiàng)卡的 Dynamic Dialogue 分區(qū)。

第二個(gè) Event 的作用在于確保每次播放敘事音頻都會(huì)從 Sequence Container 的第一個(gè)聲音對象開始播放。所以,其本質(zhì)上是一項(xiàng)保障措施。

接下來,只需創(chuàng)建 SoundBank 并向其添加新建的 2 個(gè) Event。為此,可在頂欄中轉(zhuǎn)到 Layouts 下,并選擇 SoundBank 布局或直接單擊 F7。然后,在 SoundBank Manager 中選擇 New 來創(chuàng)建新的 SoundBank。在此,我將其命名為 Main。

在 SoundBank Manager 中選中新建的 SoundBank,然后同時(shí)將 "Play_MissionBriefing" 和 "Reset_MissionBriefing" Event 從 Event Viewer 拖到 SoundBank Editor 中。

在 SoundBank Manager 中,選中新建的 SoundBank 以及對應(yīng)的平臺(tái)(Windows、Mac 等)和語言。最后,單擊 Generate Selected 按鈕。

Wwise – 動(dòng)態(tài)對白

在收到指揮官下達(dá)的命令之后,玩家會(huì)有一些時(shí)間來完成任務(wù)。依據(jù)玩家的任務(wù)執(zhí)行情況,指揮官會(huì)做出不同的反應(yīng)。在此,我們要確定哪些變量會(huì)決定指揮官對玩家說什么。首先,我們來看下玩家所要實(shí)現(xiàn)的 3 個(gè)目標(biāo):

1. 翻越障礙。

2. 到拱門下。

3. 走綠色小道,而非紅色小道。

這一任務(wù)有多種完成結(jié)果。具體來說,有以下 5 種:

1. 玩家什么都不做 (Fail, Fail, Fail)。

2. 玩家只翻越障礙 (Pass, Fail, Fail)。

3. 玩家翻越障礙,到拱門下 (Pass, Pass, Fail)。

4. 玩家翻越障礙,到拱門下,然后走紅色小道 (Pass, Pass, Red)。

5. 玩家翻越障礙,到拱門下,然后走綠色小道 (Pass, Pass, Green)。

在此,我們要追蹤 3 個(gè)變量:障礙、拱門、小道。這個(gè)時(shí)候就要用到 Switch 和 State 了。

如果仍處于 SoundBank 布局,請返回 Designer 布局(依次選擇 Layouts -> Designer 或按下 F5)。

接下來,我們要轉(zhuǎn)到 Project Explorer 的 Game Syncs 選項(xiàng)卡,然后在 Switches 分區(qū)的 Default Work Unit 中新建 3 個(gè) Switch Group:Hurdle、Archway 和 Path。對于 "Hurdle" 和 "Archway" Switch Group,我們要新建 2 個(gè) Switch:Fail 和 Pass。對于 "Path" Switch Group,我們要新建 3 個(gè) Switch:Fail、Red 和 Green。

返回 Audio 選項(xiàng)卡。在 Actor-Mixer Hierarchy 下的 Default Work Unit 中創(chuàng)建新的 Switch Container (Ctrl + Shift + Alt + W)。在此,我將其命名為 MissionResult。

選中新建的 Switch Container,然后查看 Property Editor 右側(cè)的 Switch 設(shè)置。對于此容器,首先我們要確認(rèn)玩家有沒有通過 Hurdle 考驗(yàn)。若沒能通過,會(huì)聽到指揮官表達(dá)失望的音頻。若成功通過,將前往接受 Archway 考驗(yàn)。

為此,首先將 Switch Group 設(shè)為 Hurdle,然后將 Default Switch/State 設(shè)為 Fail。藉此,可向 Assigned Objects 分區(qū)添加兩個(gè) Switch:Pass 和 Fail。對此,我們需要使用合適的對象來加以填充。

首先,將 "hurdlefailed" Sound Voice 導(dǎo)入到 "MissionResult" Switch Container 中。然后,在該 Switch Container 內(nèi)創(chuàng)建新的 Switch Container。在此,我將其命名為 Archway。

接下來,我們只需將兩者從 Contents Editor 移到相應(yīng)的 Assigned Objects 分區(qū):"hurdlefailed" Sound Voice 對應(yīng) Fail,"Archway" Switch Container 對應(yīng) Pass。

接下來,我們要在 "Archway" Switch Container 內(nèi)重復(fù)這一流程。將 Switch Group 設(shè)為 Archway,然后將 Default Switch/State 設(shè)為 Fail。將 "archwayfailed" Sound Voice 導(dǎo)入到 "Archway" Switch Container 中,然后創(chuàng)建新的 Switch Container 并命名為 Path。像之前一樣將其插入到 Assigned Objects 分區(qū)中:"archwayfailed" Sound Voice 對應(yīng) Fail,"Path" Switch Container 對應(yīng) Pass。

接下來,我們要再重復(fù)一次這一流程。不過,這次有 3 個(gè) Switch 而非 2 個(gè)。在 "Path" Switch Container 內(nèi),將 Switch Group 設(shè)為 Path,并將 Default Switch/State 設(shè)為 Fail。

接下來只需導(dǎo)入最后 3 個(gè)音頻文件:"pathfailed"、"pathred" 和 "pathgreen" Sound Voice。將其全部插入到對應(yīng)的 Assigned Objects 分區(qū)中。

我們來簡單回顧一下前面都做了什么。倘若沒能通過 Hurdle 考驗(yàn),將不會(huì)看到其余 Switch Container;此時(shí)會(huì)直接播放表示“沒能通過 Hurdle 考驗(yàn)”的消息。如果成功通過,將前往接受 Archway 考驗(yàn)。假如沒能通過這一項(xiàng)考驗(yàn),將不會(huì)看到 "Path" Switch Container;此時(shí)會(huì)播放表示“沒能通過 Archway 考驗(yàn)”的消息。如果成功通過 Archway 考驗(yàn),將前往最終的 "Path" Switch Container;在此會(huì)檢查是走了紅色小道、綠色小道還是哪條小道都沒走。這 3 個(gè)條件都會(huì)指向特定的音頻文件。

在完成所有這些之后,為之創(chuàng)建 Event 就很簡單了。與其轉(zhuǎn)到 Events 選項(xiàng)卡,我們選擇通過 Audio 選項(xiàng)卡來創(chuàng)建 Event。為此,可直接右鍵單擊 "MissionResult" Switch Container,然后轉(zhuǎn)到 New Event 下選擇 Play。這樣會(huì)自動(dòng)創(chuàng)建名為 Play_MissionResult 的 Play Event。

通過按下 F7 返回 SoundBank 布局,然后將新建的 "Play_MissionResult" Event 由 Event Viewer 拖到 SoundBank Editor 中。跟之前一樣生成 SoundBank,并確保保存 Wwise 工程。

Unity – 整合通過 Sequence Container 實(shí)現(xiàn)的基本敘事

接下來,我們要整合在 Sequence Container 中構(gòu)建的敘事音頻。通常來說,這并不難;我們完全可以逐段播放 5 次敘事音頻。但是,如何確定某一段落何時(shí)結(jié)束以便開始播放下一段落?假如我們想在各個(gè)段落之間添加短暫的延遲,該怎么辦呢?要想實(shí)現(xiàn)以上兩項(xiàng)操作,其中一種方法就是使用 Event 回調(diào)和協(xié)程函數(shù)。

為此,我們要加載 SoundBank。首先,選中層級(jí)結(jié)構(gòu)下的 WwiseGlobal 對象。接著,在 Inspector 中選擇 Add Component 并搜索 AkBank。然后,將其放到 WwiseGlobal 中。最后,從 Name: 列表中選擇所需 SoundBank。

接下來,我們需要?jiǎng)?chuàng)建新的腳本來驅(qū)動(dòng)敘事音頻。為此,可在 Hierarchy 下通過右鍵單擊并選擇 Create Empty 來創(chuàng)建新的 Empty Object。在此,我將其命名為 Narration。不過,大家可以根據(jù)需要隨意命名。接著,在 Inspector 中再次單擊 Add Component。然后,在“搜索”字段中鍵入 Narration。最后,依次選擇 New Script > Create and Add。此時(shí)會(huì)創(chuàng)建新的腳本并將其添加到主 Assets 文件夾。之后可通過 Project 選項(xiàng)卡選擇新建的腳本。


此腳本的主要目的在于“在玩家入場的時(shí)候播放第一段敘事音頻,待其播完后稍加延遲并播放下一段音頻”。這一過程會(huì)一直重復(fù),直到播完 Sequence Container 中的所有對象。

我們先來說說 Start 函數(shù)上方的 3 個(gè)成員變量,其中:


1. narrationEvent 為之前在 Wwise 中創(chuàng)建的 "Play_MissionBriefing" Event。之所以將其設(shè)為 public,是為了能通過 Inspector 設(shè)置 Event。我們將在完成腳本后執(zhí)行這一操作。

2. player 游戲?qū)ο笥糜诟嬷?Unity 聽者在哪里。之所以將其設(shè)為 public,是為了能通過 Inspector 設(shè)置 player 游戲?qū)ο蟆N覀儗⒃谕瓿赡_本后執(zhí)行這一操作。

3. narration 整數(shù)用于告知腳本已經(jīng)播放了多少個(gè)音頻文件。一旦該數(shù)值達(dá)到 5,腳本就知道不再播放任何音頻文件了。

在完成這些設(shè)置之后,我們來稍微清理一下腳本并創(chuàng)建新的函數(shù)。刪除 Update 函數(shù),因?yàn)橛貌坏剿?。在其對?yīng)位置,我們要新建 PlayNarration 函數(shù)。

在播放此函數(shù)內(nèi)的敘事音頻之前,我們需要檢查腳本是否已經(jīng)播完 Sequence Container 中的所有音頻文件。對此,我們可以直接用 if 語句來實(shí)現(xiàn)。確保僅在之前播放不到 5 次的情況下播放此音頻。就編程而言,我們要使用 narration 整數(shù):


在 if 語句內(nèi),最后要通過發(fā)送 Event 來播放敘事音頻。首先,添加以下代碼:narrationEvent.Post(player)。

這時(shí),我們將向玩家發(fā)送這一 Event。就本身而言,并沒有問題。不過,還記得我們想在此完成之后發(fā)送另一 Event 嗎?對此,我們可以使用 Event 回調(diào)來實(shí)現(xiàn)。下面來看看這一行腳本。

AkCallbackType 代表我們要結(jié)合此 Event 使用什么樣的回調(diào)?;卣{(diào)的類型有好幾種,大多指向音樂 Event。但是在此,我們想讓回調(diào)追蹤 Event 的結(jié)束時(shí)機(jī)。

我們可以看到 AkCallbackType 的開頭添加有 (uint),其會(huì)將 AkCallbackType 的結(jié)果由某一數(shù)值轉(zhuǎn)換為無符號(hào)整數(shù)。它只是為了滿足函數(shù)的需要;每次創(chuàng)建 Callback 腳本都會(huì)用到。

函數(shù)的最后部分 (NarrationEnd) 用于告知 Unity 在該 Event 結(jié)束后要播放此函數(shù)內(nèi)的聲音對象。就目前而言,因?yàn)楹瘮?shù)不存在,所以會(huì)在 NarrationEnd 下收到錯(cuò)誤消息。那么,下面我們就來創(chuàng)建一個(gè)!

注意,NarrationEnd 對應(yīng)括號(hào)中的所有對象都是必要的。這是因?yàn)?Event Callback 函數(shù)要向 NarrationEnd 發(fā)送相關(guān)信息(比如發(fā)送的 Event 以及所用 Callback 類型)。在此,我們并不會(huì)用到這些信息。但是,最好知道都有哪些信息,這樣在必要時(shí)可以使用。

在繼續(xù)設(shè)置 NarrationEnd 函數(shù)之前,我們需要對 PlayNarration 函數(shù)做最后的擴(kuò)充。下面來直接在 narrationEvent.Post 之后添加以下代碼行:

只要在數(shù)字變量之后添加 ++,其數(shù)值就會(huì)增加 1 個(gè)單位。

現(xiàn)在,我們解決了一項(xiàng)難題:發(fā)送 Event 并等待其結(jié)束以執(zhí)行某些操作。接下來,我們需要在這一 Event 結(jié)束后發(fā)送下一敘事 Event 之前添加延遲。對此,我們可以使用協(xié)程函數(shù)來實(shí)現(xiàn)。在 NarrationEnd 函數(shù)之下,我們要?jiǎng)?chuàng)建新的函數(shù):

- 利用 IEnumerator 函數(shù)(即協(xié)程函數(shù))在執(zhí)行函數(shù)前在后臺(tái)計(jì)時(shí)。這對將函數(shù)延遲一段時(shí)間來說再合適不過了。

- 通過 yield return new WaitForSeconds(1f) 來告知 Unity 要等多長時(shí)間再執(zhí)行 yield 后面的代碼。在本例中,我們告知 Unity 等待 1 秒。

- 最后,循環(huán)回 PlayNarration() 函數(shù)。

我們將在 NarrationEnd 函數(shù)內(nèi)調(diào)用這一新的協(xié)程函數(shù)。對此,可采用有別于大多數(shù)函數(shù)調(diào)用的方式來實(shí)現(xiàn):

StartCoroutine(Wait());

在循環(huán)回 PlayNarration 函數(shù)時(shí),Unity 會(huì)檢查是否還有尚未播放的敘事音頻。如有,則播放下一敘事音頻,重新循環(huán)一遍。若無,則停止循環(huán),以此正式結(jié)束整段敘事。

在完成設(shè)置之前,我們還有幾件事要做。下面來將以下代碼添加到 Start 函數(shù):

這樣會(huì)在啟動(dòng) PlayNarration() 循環(huán)之前發(fā)送 "Reset" Event。

最后,我們需要返回 Unity,并按下圖在 Inspector 中設(shè)置 Narration 腳本中新增的 Narration Event 和 Player 字段。

在保存進(jìn)度后,按下 Play 并檢查所作設(shè)置。若是沒有獲得預(yù)期結(jié)果,不妨將自己的腳本與以下腳本進(jìn)行對比:

Unity – 整合任務(wù)簡報(bào)

現(xiàn)在,玩家收到了任務(wù)簡報(bào)。接下來,要繼續(xù)完成任務(wù)。游戲需要確定玩家是否真的翻越了障礙、到了拱門下、走了綠色或紅色小道。為此,我們接下來要為障礙、拱門和兩條小道創(chuàng)建 Box Collider。

對此,我們可以通過創(chuàng)建 Cube 對象來實(shí)現(xiàn)。在層級(jí)結(jié)構(gòu)下,通過右鍵單擊并依次選擇 3D Object -> Cube 來新建 4 個(gè) Cube 對象。將其中一個(gè) Cube 放到障礙之上,確保玩家肯定會(huì)與之發(fā)生碰撞,然后在拱門之下執(zhí)行同樣的操作。最后,將剩下 2 個(gè) Cube 直接放到綠色和紅色小道之上。在此,可使用 Move (W)、Rotate (E) 或 Scale (R) 工具來自由調(diào)節(jié)這些 Cube。

在每個(gè) Cube 中,確保通過取消選中 Mesh Renderer 組件左側(cè)的復(fù)選框來將其禁用。這樣可以隱藏 Cube。接下來,轉(zhuǎn)到 Box Collider 組件,并選中 Is Trigger 復(fù)選框。這樣將允許玩家穿過 Cube 并以此觸發(fā) Event。

針對 "Hurdle" 和 "Archway" Cube,在 Inspector 中單擊 Add Component,然后搜索并選中 AkSwitch 腳本。然后,按照同樣的方式將 AkTriggerEnter 組件添加到這兩個(gè) Cube。

首先,在 AkSwitches 中將 TriggerOn 改為 AkTriggerEnter 并取消選中 Start。接著,選中 Use Other Object 復(fù)選框。在啟用此復(fù)選框之后,便可指定由哪個(gè)對象觸發(fā) Switch 切換。在本例中,AkTriggerEnter 組件中的 Trigger Object 為觸發(fā)對象。然后,在 AkTriggerEnter 中直接將 player 對象由 Hierarchy 拖到 Trigger Object 字段中。

最后,選擇與各個(gè)對象對應(yīng)的 Switch 名稱:Hurdle / Pass 對應(yīng) Hurdle 對象,Archway / Pass 對應(yīng) Archway 對象。

最終結(jié)果應(yīng)如下圖所示:

每次玩家進(jìn)入這些 Cube,對應(yīng)的 AkSwitch 都會(huì)由 Fail 切換為 Pass。只有在玩家穿過這些 Trigger 對象時(shí)才會(huì)發(fā)生這種情況,因?yàn)槲覀儗?player 設(shè)為了 AkTriggerEnter 組件中的唯一觸發(fā)對象。

接下來,我們繼續(xù)設(shè)置 "Red" 和 "Green" Cube。我們要對這些 Collider 做一些不同的設(shè)置。與其直接針對每條小道設(shè)置 Switch,我們選擇在玩家踏上其中某條小道時(shí)立即結(jié)束任務(wù)。為此,我們需要?jiǎng)?chuàng)建新的腳本。

轉(zhuǎn)到與其中一條小道對應(yīng)的 Inspector 并創(chuàng)建新的組件:首先鍵入腳本名稱(如 MissionEnd),接著選擇 New Script,然后選擇 Create and Add。確保將此腳本也添加到其余小道。

在新建的腳本中,我們要添加 2 個(gè)新的成員變量:

- bool 變量:僅僅監(jiān)測結(jié)果是 true 還是 false。在本例中,我們要監(jiān)測任務(wù)是否完成。

- Wwise Switch(完成腳本后會(huì)在 Inspector 中進(jìn)行設(shè)置):依據(jù)玩家所走的小道將 "Path" Switch Group 設(shè)為 Red 或 Green。

接下來,我們要?jiǎng)h除 Start 和 Update 函數(shù)。然后,在其對應(yīng)位置按照以下執(zhí)行順序添加新的函數(shù):

- 首先,利用 Unity 專用函數(shù) OnTriggerEnter 檢查某個(gè)對象(帶有 Collider)是否進(jìn)入了另一對象的觸發(fā)區(qū)域。若是,則函數(shù)將追蹤帶有 other 變量的觸發(fā)對象。

- 接著,檢查任務(wù)是否完成。若沒有完成,則將 missionComplete 變量設(shè)為 true。這樣是為了確保僅播放一次此腳本中的音頻。

- 然后,根據(jù)玩家所選的小道將 Switch 的值設(shè)為 Red 或 Green。

- 最后,將 "Play_MissionResult" Event 發(fā)給 other.gameObject(本例中為 player)。

返回 Unity 并轉(zhuǎn)到與 "Red" 和 "Green" Collider 對應(yīng)的 Inspector。確保針對 Red 小道設(shè)置 "Path / Red" Switch,并針對 Green 小道設(shè)置 "Path / Green" Switch。對所作設(shè)置進(jìn)行測試。試聽任務(wù)簡報(bào),然后踏上紅色或綠色小道以此完成任務(wù)。

目前為止,對我們的游戲來說確實(shí)可行。不過,這里有個(gè)問題。眼下能得到的結(jié)果只有兩種:玩家走綠色小道或紅色小道??墒牵覀冎霸?Wwise 中設(shè)置的另外 3 種結(jié)果怎么辦呢?

為了解決這一問題,我們可以在開頭敘事結(jié)束后設(shè)置一個(gè) 5 秒計(jì)時(shí)器。若在玩家踏上小道之前計(jì)時(shí)結(jié)束,則任務(wù)自動(dòng)失敗。此時(shí)將根據(jù)玩家的完成進(jìn)度來播放 MissionResult 敘事音頻。對此,我們可以在之前在剛開始的 Unity 章節(jié)中創(chuàng)建的 Narration 腳本中加以實(shí)現(xiàn)。

打開 Narration 腳本并創(chuàng)建新的協(xié)程函數(shù):

- 就跟第一個(gè)協(xié)程函數(shù)一樣,我們要將此腳

- 之后,我們要在 MissionEnd 腳本中引用 missionComplete 變量(僅在其為 public static 成員變量的情況下可行)。首先,我們來檢查玩家踏上其中一條小道之后任務(wù)是否結(jié)束。

- 若玩家尚未結(jié)束任務(wù),則要將 missionComplete 變量設(shè)為 true,以表明任務(wù)現(xiàn)在結(jié)束了。這樣的話,玩家便無法在 5 秒計(jì)時(shí)完畢后踏上小道并再次完成任務(wù)。

- 最后,我們針對玩家播放 MissionResult 敘事音頻。

最后在 PlayNarration() 函數(shù)結(jié)尾添加?StartCoroutine(Wait2())。然后,保存并測試所作設(shè)置。逐個(gè)嘗試 5 種不同的場景,看看是否都能正常運(yùn)行。若不能,請檢查所作設(shè)置,確認(rèn)有沒有遺漏。若能,那恭喜!您成功構(gòu)建了切實(shí)可行的動(dòng)態(tài)對白系統(tǒng)。

下周,我會(huì)說說如何使用 Wwise 和 Unreal 整合對白。敬請期待!


杰克?蓋米林 (JAKE GAMELIN)

作曲家 | 音樂老師 | 聲音設(shè)計(jì)師

杰克?蓋米林 (Jake Gamelin) 是一名作曲家、音樂老師、技術(shù)音頻設(shè)計(jì)師,目前居住在美國南加州。在圣地亞哥州立大學(xué)接受音樂教育之后,杰克參與制作了很多小型電子游戲項(xiàng)目。與此同時(shí),他還積極從事互動(dòng)音頻設(shè)計(jì)和音樂的研究與教學(xué)。一方面希望能拓展自身的聲音設(shè)計(jì)技能,另外也想培養(yǎng)有意從事游戲音頻的新人。

https://www.jakegamelin.com/


在 Wwise 和 Unity 中構(gòu)建對白 | 敘事音頻的評論 (共 條)

分享到微博請遵守國家法律
张家港市| 巴彦县| 宁乡县| 岢岚县| 牡丹江市| 建始县| 阿克| 邢台市| 新和县| 连江县| 张家界市| 公安县| 东丽区| 林西县| 铁力市| 安丘市| 三穗县| 平湖市| 曲松县| 桦川县| 三河市| 枣强县| 宁津县| 大兴区| 鄢陵县| 金川县| 杂多县| 个旧市| 乐亭县| 云南省| 永仁县| 方正县| 宁城县| 启东市| 靖安县| 阿巴嘎旗| 焉耆| 黔东| 宝丰县| 遂平县| 盈江县|