在 Audiokinetic 社区问答论坛上,用户可对 Wwise 和 Strata 相关问题进行提问和解答。如需从 Audiokinetic 技术支持团队获取答复,请务必使用技术支持申请单页面。

Parsing WWU in Unity takes hours, with requested fix

0 投票

Hello,

We use WAAPI to generate dialogue events for our Unity game. Our game has around 12,000 lines of dialogue.

Let me first explain an odd WAAPI limitation we ran into: There seems to be no way to clear out the Actions set to an Event and add the one you want without replacing the event entirely...

  • If we use the "event" field in ak.wwise.core.audio.import, it ADDS an action to that event rather than replacing it.
  • We cannot access the "@Action" field of an event during ak.wwise.core.object.create, unless we use a different JSON serializer rather than JsonUtility, since JsonUtility will ignore the @ symbol in the serialization.
    • Even if we could, I'm not sure what the functionality would be. Would this add an action or replace the Action set with the ones I specified?
  • Thus, we had to overwrite all generated events with no Actions, then set the action at the import step using the event field. Remember, that's 12,000 events that get assigned a different GUID.

If you have any pointers in getting around this, please let us know!

 

BUT:

 

The biggest issue this causes the WWU parsing step to take 1-5 HOURS after the Wwise events have been generated. This is killing productivity for everyone who uses Unity at the studio.

 

I narrowed it down to one line of code in the Unity plugin, in WwiseObjectReference.cs line 128 via AkWwiseBuilder.cs line 583: The plugin uses AssetDatabase.DeleteAsset() for ALL of these 12,000 "removed" event reference objects. This takes 0.25 - 1 second each.

 

Fortunately for us, we don't actually use the Unity reference for any of our VO; we call it all directly through AkSoundEngine.PostEvent(). This means that these reference objects didn't actually exist!

 

My optimization is as follows, which I hope can make it into the next Unity plugin update:

if (UnityEditor.AssetDatabase.LoadAssetAtPath<WwiseObjectReference>(path) != null)

{

    UnityEditor.AssetDatabase.DeleteAsset(path);

}

LoadAssetAtPath is hundreds or even thousands of times faster than DeleteAsset, so this saved a TON of parsing time.

 

I'd also like to reiterate from my other post (which has not yet been answered) that the event reference objects are causing us a ton of problems: https://www.audiokinetic.com/qa/5516/unity-integration-2018-1-4-update-causing-massive-problems

 

Thank you, and I hope this is looked into soon.

 

Best,

Bryant

最新提问 2月 6, 2019 分类:General Discussion | 用户: Bryant C. (150 分)

Please sign-in or register to answer this question.

...