社区问答

欢迎来到 Audiokinetic 社区问答论坛。在此,Wwise 和 Strata 用户可互帮互助。如需我们团队直接提供协助,请前往技术支持申请单页面。若要报告问题,请在 Audiokinetic Launcher 中选择“报告错误”选项(注意,问答论坛并不会接收错误报告)。我们内部设有专门的错误报告系统,会有专人查看报告并设法解决问题。

要想尽快得到满意的解答,请在提问时注意以下几点:

  • 描述尽量具体:比如,想达到什么样的目的,或者具体哪里有问题。
  • 包含关键细节:比如,Wwise 和游戏引擎版本以及所用操作系统等等。
  • 阐明所做努力:阐明自己为了排除故障都采取了哪些措施。
  • 聚焦问题本身:聚焦于问题本身的相关技术细节,以便别人可以快速找到解决方案。

0 投票

In using AkEvent without AkComponent in seqeuncer, Travelling other level with cancelling Event occures game crash in packaged game.

Because PostEvent with DUMMY_GAMEOBJ have not registered to the CallbackManager, CancelEventCallbackCookie in SectionBeingDestroyed is ignored. 
*see FAkAudioDevice::PostEvent

I fixed this issue with following code.

*** Wwise/Source/AkAudio/Private/AkAudioDevice.cpp
***************
*** 1125,1130 ****
--- 1125,1157 ----
  return PostEvent(in_pEvent->GetName(), in_pActor, in_uFlags, in_pfnCallback, in_pCookie, in_bStopWhenOwnerDestroyed);
  }
 
+ //---------- begin code ------------- 
+ template<typename FCreateCallbackPackage>
+ AkPlayingID FAkAudioDevice::PostEvent(
+ const FString& in_EventName,
+ AkGameObjectID gameObjID,
+ FCreateCallbackPackage CreateCallbackPackage
+ )
+ {
+ AkPlayingID playingID = AK_INVALID_PLAYING_ID;
+ 
+ if (m_bSoundEngineInitialized && CallbackManager)
+ {
+ auto pPackage = CreateCallbackPackage(gameObjID);
+ if (pPackage)
+ {
+ playingID = AK::SoundEngine::PostEvent(TCHAR_TO_AK(*in_EventName), gameObjID, pPackage->uUserFlags | AK_EndOfEvent, &FAkComponentCallbackManager::AkComponentCallback, pPackage);
+ if (playingID == AK_INVALID_PLAYING_ID)
+ {
+ CallbackManager->RemoveCallbackPackage(pPackage, gameObjID);
+ }
+ }
+ }
+ 
+ return playingID;
+ }
+ //---------- end code ------------- 
+ 
  /**
   * Post an event to ak soundengine by name
   *
***************
*** 1150,1156 ****
--- 1177,1189 ----
  if (!in_pActor)
  {
  // PostEvent must be bound to a game object. Passing DUMMY_GAMEOBJ as default game object.
+ #if 1 
+ return PostEvent(in_EventName, DUMMY_GAMEOBJ, [in_pfnCallback, in_pCookie, in_uFlags, this](AkGameObjectID gameObjID) {
+ return CallbackManager->CreateCallbackPackage(in_pfnCallback, in_pCookie, in_uFlags, gameObjID);
+ });
+ #else
  return AK::SoundEngine::PostEvent(TCHAR_TO_AK(*in_EventName), DUMMY_GAMEOBJ, in_uFlags, in_pfnCallback, in_pCookie);
+ #endif
  }
  else if (!in_pActor->IsActorBeingDestroyed() && !in_pActor->IsPendingKill())
  {
*** Wwise/Source/AkAudio/Public/AkAudioDevice.h
***************
*** 1225,1230 ****
--- 1225,1239 ----
      FCreateCallbackPackage CreateCallbackPackage
    );
 
+ //----------------BEGIN CODE
+   template<typename FCreateCallbackPackage>
+   AkPlayingID PostEvent(
+     const FString& in_EventName,
+     AkGameObjectID gameObjID,
+     FCreateCallbackPackage CreateCallbackPackage
+   );
+ 
+ //----------------END CODE
 
    // Overload allowing to modify StopWhenOwnerDestroyed after getting the AkComponent
    AKRESULT GetGameObjectID(AActor * in_pActor, AkGameObjectID& io_GameObject, bool in_bStopWhenOwnerDestroyed );

 

分类:General Discussion | 用户: Takashi S. (100 分)

Please sign-in or register to answer this question.

...