Wwise+UE4踩坑筆記
平時慢慢攢下來的各種小坑吧,持續(xù)更新,不對的地方歡迎指正~
1.?自帶的Occlusion系統(tǒng)(不是Spatial Audio那套)
手動添加的Ak組件、Wwise預(yù)制的AkAmbientSound藍(lán)圖、Wwise預(yù)制的動畫notify播放音頻時自動生成的Ak 組件,都有可以單獨(dú)設(shè)置的Occlusion設(shè)置。
?
默認(rèn)設(shè)置的檢測通道是Visibility(所有可視的物體都會遮蔽聲音)
檢測間隔0.2秒(改成0是關(guān)閉此功能)

什么設(shè)置都不做的話,播放的音頻會根據(jù)攝像機(jī)是否能看到該物體進(jìn)行遮蔽。(在Wwise里關(guān)閉Occlusion也可以解決此問題, 如果想要善用此功能可以做具體的設(shè)置)
?
工程設(shè)置里面可以設(shè)置默認(rèn)的Occlusion Channel (影響通過Post Event等節(jié)點(diǎn)臨時生成的Akcomponent,不影響已經(jīng)存在的akcomponent)

AkComponent.cpp里可以修改默認(rèn)刷新時間 (影響通過Post Event等節(jié)點(diǎn)臨時生成的AkComponent,不影響已經(jīng)存在的AkComponent)

2.?Animation
在動畫上預(yù)覽聲音通知的時候,經(jīng)常會出現(xiàn)3D聲音聽不到的情況,這種時候右鍵動畫預(yù)覽場景更新一下相機(jī)位置,就可以聽到了……
AnimNotify_AkEvent 這個通知【打勾follow時】會在人物的mesh component下尋找ak組件,尋找不到的話會臨時掛一個AkComponent使用。如果用這個通知的話最好提前在mesh component下掛好ak。(但是它預(yù)覽的時候還是找不到的,有點(diǎn)蛋疼)。【不打勾follow】時,它就是一個定點(diǎn)播放的音效,不用到ak組件。
?
3.?觸發(fā)音頻的節(jié)點(diǎn)的混用注意事項(Post event /post ak event/ post event at location 等)
使用Post Event時,會在所選Actor下生成一個AkComponent并使用;
使用Post Ak Event時,會使用所選的AkComponent;
使用Post Event At Location時,會使用WwiseGlobal;
Animation 上使用的AnimNotify_AkEvent,打勾’Follow’的話效果同’Post Event’,不打勾’Follow’的話效果同’Post Event At Location’

Set Switch和Set RTPC也都有指定Ak的版本(節(jié)點(diǎn)名字是一樣的,target不一樣)。
?
經(jīng)測試,自動生成的AkComponent和手動添加的Ak無法被另一種使用方式識別,因此設(shè)定rtpc和switch的時候要注意,最好不要把target為actor的節(jié)點(diǎn)和target為ak的節(jié)點(diǎn)混用。
?
另外,RTPC有全局/object兩種用法,設(shè)置全局時actor不要連即可。當(dāng)局部有賦值時,全局?jǐn)?shù)值會被忽略,這一點(diǎn)也要注意一下。
?
Post Event和Post Event At Location有異步加載的版本(好像直接使用打包之后會有問題)。自行使用Async Load Asset來做異步加載,需要做特殊處理,不然打包之后資源無法正常播放。
?
?
4.?AK Switch/State/RTPC 類
在前幾個版本(2.6之前?)中無法作為一個類填在DataTable里(更低版本藍(lán)圖里也不能使用這個變量),此時只能使用name,升級到后期版本之后可以直接引用這些類,會方便很多。?用了AK Switch Object和Ak State Object后,Set State/Set Switch節(jié)點(diǎn)不再需要GroupName。
?

?
5.?EBP相關(guān)
?
首先,能不用的話,盡量不要用。(Wwise 2019.2.x早期版本會默認(rèn)開啟,記得檢查設(shè)置)對于已經(jīng)使用和不得不使用的情況,強(qiáng)烈歡迎大家多多分享遇到的坑以及解決辦法。這里僅分享個人經(jīng)驗。
?
設(shè)置:
Edit > Project Settings > Wwise > Integration Settings ?(這個頁面在不同Wwise版本差別較大)以下是設(shè)置參考


Wwise里也需要修改Project Settings里的設(shè)置。Generate Per Bank Metadata File還有Include GUID需要選。

因為關(guān)閉了自動同步,所以進(jìn)行生成音頻資源的步驟是:
1)保存Wwise工程? ?2)UE中Build—Force Asset Synchronization? 3)Generate Sound Data

開啟EBP時,建議禁用Split Switch Container Media,原因如下

?
EBP的異步加載相關(guān):(常見問題:打包后播放音頻顯示Event Id Not Found)
AkEvent只是一個殼子,它的資源是所引用的Media。加載AkEvent的時候自動會加載其Meida,但是沒有回調(diào),只提供IsMediaReady用來判斷是否加載完。

用EBP時需要版本控制Ignore以下文件夾(Wwise工程目錄下):
.cache/*
GeneratedSoundBanks/*
?
EBP的各種其他小問題:
1.?打開UE工程一直顯示Cannot create asset in.... 或者存在同名akevent,無法進(jìn)行其他操作(無法clear)。
1)關(guān)掉UE引擎,回滾版本控制的Content/WwiseAudio(或者自定義路徑)文件夾至上一個無錯誤版本,重新generate。過程中保證自己的Wwise工程不受影響。
2)如果沒有解決,檢查之前回滾的重命名之類的操作有沒有導(dǎo)致多余的uasset存在,可以手動刪除。
3)再沒有解決,【暴力方法】刪除所有的EBP生成的資源(服務(wù)器里面也刪除),重新生成并上傳。(我這樣干過,沒丟引用。小心使用。)
?
2.?Generate Sound Data的時候會Checkout(更新)過多的文件;或者很大一部分莫名其妙的報錯;或者GenerateSoundData時沒有報錯但是無法正常生成資源
1)檢查UE工程設(shè)置里的Wwise > User Setting > Installation 里的Wwise安裝路徑是否正確、是否是同一個Wwise版本。
2)檢查UE工程設(shè)置里的Wwise > Integration Settings里的 Wwise Project Path 是否正確。Sound Data里的設(shè)置是否和原來一樣。
3)檢查Wwise工程目錄下的.cache文件夾以及GeneratedSoundBanks文件夾是不是被版本控制改成了只讀。
3. 一個音頻源的多個復(fù)制體,如果Stream的開關(guān)不一樣的話,會造成播不出來的情況。因為它們在UE里面是一個Media,不支持同時stream和非stream。這個在使用時要避免。
?
6.?平臺設(shè)置:
打包到平臺上發(fā)現(xiàn)沒有聲音(PS5的報錯內(nèi)容為 “Error :InitAudioOutContext:Failed sceAudioOut2ContextCreate with MaxObjectPorts 128, maxPorts 16,numGrains 512,queueDepth 4 ……”),很大原因是Wwise被UE的該平臺原生音頻系統(tǒng)擠掉了,需要進(jìn)行禁用,具體參考下圖:
?


?
PS5Engine.ini里面則是修改為
AudioDeviceModuleName=””
AudioMixerModuleName=””
UseAudioMixer=false
?
?
7.?Spatial Audio?已知的坑
1.?Room和其中的物體上的ak組件的加載先后問題。不動的物體需要在Room加載完之后再更新一下位置,不然無法識別和Room關(guān)系。(編輯器中無此問題)
2.?用了這套就別忘了關(guān)掉所有ak組件上的Occlusion。
3. AkGeometry無法加在普通的StaticMesh Actor上,所以應(yīng)用限制還是比較大。
?