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

How to pass FOnAkPostEventCallback struct in UE4 Wwise

+3 投票
I have recently updated to the latest Wwise and Unreal Engine versions. What I noticed is that my "PostEvent" functions were now throwing errors, because they no longer require two parameters. One of the new parameters is a reference to a struct of type "FOnAkPostEventCallback", for which visual studio says that the declaration is undefined. So what exactly am I supposed to pass into this function? Would highly appreciate a descriptive response!
最新提问 8月 9, 2018 分类:General Discussion | 用户: Marc B. (130 分)
Ditto. Please advise. In addition, please implement a deprecation/change strategy for the Ak UE4 plugin code.

PostAkEvent() is a UFunction, and deprecation metadata can be added to the UFUNCTION attribute. Perhaps with a deprecation message like, 'PostAkEventDEPRECATED() will be removed in Wwise [major.minor]. Please convert caller to use the updated PostAkEvent().', etc.

Due to limitations with UHT, we can't have UFUNCTION overloads, so perhaps AkComponent::PostAkEvent(...) could have been copied to a PostAkEventDEPRECATED(...), so that callers would at least have a way to unblock in the short term.

UFunctions
https://docs.unrealengine.com/en-us/Programming/UnrealArchitecture/Reference/Functions


FWIW: On the Unity side, they respect System.ObsoleteAttribute.


- thanks
I would also like to know this. Please could we get an official response for how to do this in C++.

3 个回答

–2 投票

Marc B., look at AkComponent.cpp for a workaround...

if you need to call a Blueprint function, you can use PostAkEventByName(), which calls PostAkEventByNameWithCallback() with the appropriate default/null args...
int32 UAkComponent::PostAkEventByName(const FString& in_EventName)

From cpp, you can call PostAkEventByNameWithCallback directly with the default/null args specified here in comments, if you want...
AkPlayingID UAkComponent::PostAkEventByNameWithCallback(const FString& in_EventName, AkUInt32 in_uFlags /*= 0*/, AkCallbackFunc in_pfnUserCallback /*= NULL*/, void * in_pUserCookie /*= NULL*/)

Whatever works for you. All roads eventually lead to AudioDevice->PostEvent().

- cheers

最新回答 8月 10, 2018 用户: Paul B. (160 分)
–1 投票

Though this question is asked at years ago, but for anyone in the future who steps into this QA.

Got me confused today too, but finally I noticed that the "FOnAkPostEventCallback" is a delegation's name, and it is defined in AkGameplayTypes.h (my Wwise SDK version is 2019.1.9.7221). The UE4 Delegate could be used like a class or struct, but the compiler won't find its reference or implement when it's used in another .h file... Here's the definition copied from AkGameplayTypes.h:

DECLARE_DYNAMIC_DELEGATE_TwoParams(FOnAkPostEventCallback, EAkCallbackType, CallbackType, UAkCallbackInfo*, CallbackInfo);

最新回答 9月 16, 2021 用户: 军懿 (160 分)
修改于 9月 16, 2021 用户:军懿
0 投票

Let me give u an example. It just cost me lots of time to find a way to make my c++ callback work just like BP:

(Be careful about the event mask, u should set it to the event type u want to listen, set to 0 will miss all events. And also have a notice on the UFUNCTION macro of the callback, it's for dynamic delegate.)

class ATest : public AActor
{
public:
    FOnAkPostEventCallback OnAkPostEventDelegate;

    virtual void BeginPlay() override;
    virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
    
    UFUNCTION()
    void OnAkPostEventCallback(EAkCallbackType CallbackType, UAkCallbackInfo* CallbackInfo);

    void LetWwiseSpeakSomething(AActor* Actor, UAkAudioEvent* AkEvent);
};

void ATest::BeginPlay()
{
    OnAkPostEventDelegate.BindDynamic(this, &ATest::OnAkPostEventCallback);
    
    // other codes;
}

void ATest::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
    OnAkPostEventDelegate.Clear();
    // other codes;
}


inline void ATest::LetWwiseSpeakSomething(AActor* Actor, UAkAudioEvent* AkEvent)
{
    UAkGameplayStatics::PostEvent(AkEvent, Actor, AK_EndOfEvent, OnAkPostEventDelegate);
}
最新回答 9月 21, 2023 用户: Yuju S. (150 分)
...